![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 29.11.2009
Сообщений: 51
|
![]()
Я написал функцию конвертирующую файлы из одного формата в другой.
Сначала функция работала без ошибок.Потом я запустил на конвертацию файл большого размера, функция так же сработала без ошибок.Однако если не выходить из программы а повторного запустить функцию выскакивает ошибка EAcess violation.После того как я нажал OK программа зависла,а место возникновения ошибки в коде не было показано.Как в таком случае можно определить где возникла ошибка и исправить ее. Пишу на C++ Builder 6.0. |
![]() |
![]() |
![]() |
#2 |
Я
Форумчанин
Регистрация: 24.04.2010
Сообщений: 693
|
![]()
Скорее всего во время открытия одного из файлов, может после выполнения функции ты забываешь его закрыть? Может быть во время попытки чтения из исходного файла или записи в целевой файл. В общем надо разбираться
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©. |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,069
|
![]()
Ставим точку останова на первой строке функции (слева от кода есть такая вертикальная серая полоса толщиной примерно в сантиметр, на неё мышой жмякаем, должен красный кружок напротив соответствующей строки появиться) и пошагово смотрим как всё выполняется. Так можно определить на какой именно строке вылетает исключение. Так же можно определить значения переменных.
Access Violation, как правило, вылетает из-за неправильной работы с указателями и всплывает ошибка не на проблемной строке, а после неё. Так что корень зла пошаговой отладкой не найти. Можно только узнать последствия и по ним выявить виновника. |
![]() |
![]() |
![]() |
#4 | |
Я
Форумчанин
Регистрация: 24.04.2010
Сообщений: 693
|
![]() Цитата:
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©. |
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 29.11.2009
Сообщений: 51
|
![]()
mrChester,все открываемые файлы закрываются в конце функции,вся выделяемая память освобождается.
pu4koff,этот файл конвертируется 10 минут, если по шагам выполнять очень много времени займет. |
![]() |
![]() |
![]() |
#6 |
Я
Форумчанин
Регистрация: 24.04.2010
Сообщений: 693
|
![]()
Ошибка появляется при повторном выполнении, значит один раз прогони конвертацию, а потом при повторном выполнении функции уже приостанови, пошагово не нужно делать все, конвертация у тебя проходит в цикле, поэтому сам цикл нет надобности рассматривать пошагово, поставишь еще одну метку (F5) сразу после цикла после цикла и посмотришь как ведет себя программа при закрытии.
ЗЫ. Может лучше код покажешь?
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 29.11.2009
Сообщений: 51
|
![]()
mrChester,попробовал сделать как ты написал это заняло 8 часов и почти не дало результатов, я сделал по-другому: создал новый проект добавил все классы и функции в один файл(изначально у меня было 2 файла один для формы другой для классов и функций конвертации) и в результате после ошибки в коде начало показывать место ее возникновения.
Ошибка возникает во время выделения памяти оператором new для объекта. Ошибка такая: Project Project1.exe raised exception class EAccessViolation with message "Access violation at address 01193E3B in module 'BORLNDMM.DLL'.Write of address 0E93BF1C. Последний раз редактировалось HollyPaladin; 04.06.2010 в 12:41. Причина: хочу убать код так-как сам уже разобрался |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 29.11.2009
Сообщений: 51
|
![]()
Все исправил ошибку.
Только теперь возникла новая. Эту функцию нужно поместить в dll и вызывать ее оттуда.Я поместил ее в dll,написал програму загружающую функцию из длл.Если запускать эту программу из билдера то все работает без ошибок, а если запустить экзешник из папки с проектом то программа зависает в начале работы, на форме пишет not responsing. Из-за чего может зависать программа и как это исправить? |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка Access Violation | AHTuKiLLeR | Общие вопросы Delphi | 8 | 02.06.2009 10:48 |
violation of FOREIGN KEY | KiSH333 | БД в Delphi | 1 | 17.02.2009 16:05 |
Access Violation | SunKnight | Общие вопросы Delphi | 2 | 05.06.2008 16:46 |
Access Violation | Carbon | Общие вопросы Delphi | 12 | 18.09.2007 19:55 |