Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизThe memory could not be "read" Найти похожие ветки
← →
Anatta (2004-04-04 16:53) [0]Привет всем мастерам Делфи!
Помогите разрешить одну проблему, связанную с появлением сообщения об ошибке через пол-секунды после завершения программы. Сообщение примерно такого содержания:
"the instruction at "0x406cf0ca" referenced memory at 0x00fd232c The memory could not be "read". " После "OK" это же сообщение появляется еще раз, и после этого еще одно сообщение "The exception. Unknown software exception (0xc0000027 occured in the application at location 0xc7c5c1b04."
Хотя у меня адреса не такие, а эти взяты из аналогичной темы на Ру-Боарде:
http://forum.ru-board.com/misc.cgi?action=printtopic&forum=33&topic=2829
В той теме рассматривается родственная моей ошибке, однако у меня она всплывает не систематически, а скорее спонтанно, т.е. никогда не угадаешь, когда появится очередная. Вот это и осложняет отслеживание причин. Именно о последних мне и хотелось у вас спросить. Т.е., что может послужить причиной появления таких сообщений? Просто, может быть, у кого-то нечто подобное уже бывало, и он как-то уже справлялся с этим – очень бы хотелось услышать описание такого опыта.
Я, можно сказать, новичок в Делфи – это первая моя серьезная разработка, поэтому я не сомневаюсь, что где-то в чем-то ошибся, или что-то упустил. В теме на РУ-Боарде речь была о неправильной работе с указателями, но боюсь, что здесь у меня все в порядке. Единственное подозрительно место в программе было модуле обявления всех переменных в секции инициализации, типа:initialization
VersInfo := TVersionInfo.Create;
MQNormsFound:=TStringList.Create;
MQNormsFound.Sorted := true;
MQNormsError:=TStringList.Create;
MQNormsError.Sorted := true;
finalization
VersInfo.Free;
MQNormsFound.Free;
MQNormsError.Free;
Полагая, что возможно именно здесь вкралась ошибка, я сделал проверку такую, как
finalization
VersInfo.Free;
MQNormsFound.Free;
MQNormsError.Free;
MQNormsFound := Pointer(StrToInt(‘1123322’));
MQNormsError.Free;
После этого, безусловно, сообщение об ошибке при завершении процесса появилось, но не совсем такое, о котором идет речь, а EInvalidPointer, подкрепленное Run-time error 217. Та же ошибка, о которой я говорю, просто бич какой-то. Я уже не знаю с какой стороны к ней подходить. Все еще осложняется тем, что она появляется крайне редко, при этом я не могу понять, какие же факторы ее вызывают. Буду очень признателен за любое указанное направление в решении этой проблемы. Или может все же указатели?..
Использую Apollo VCL 6.0 и Flexcel v2.5.3.
← →
DrPass © (2004-04-04 19:50) [1]К чему это?
MQNormsFound := Pointer(StrToInt(‘1123322’));
И к чему два раза подряд делать это?
MQNormsError.Free;
А вообще, ошибка может быть где угодно. А может, ты просто используешь DLL без ShareMem...
← →
Anatta (2004-04-05 18:27) [2]//И к чему два раза подряд делать это?//
Тем самым я надеялся создать ситуацию, когда объект уже освобожден, а указатель на него все еще ссылается. Об этой ситуации, насколько я понял, и шла речь на РУ-Боарде. Исключение создалось, но не то, что было прежде у меня, а значит причина не в этом участке кода.
//А может, ты просто используешь DLL без ShareMem...//
Можно вот этот момент поподробнее.
Свои DLL я не использую, но вот Apollo VCL принуждает к этому: все функции по работе с БД и индексамии сидят в библиотечках, соответственно и приложение, написанное с использованием Apollo SDE требует для своей работы эти DLL-ки.
← →
Digitman © (2004-04-05 18:36) [3]
> Anatta
склонен предположить, что подобная ситуация возникает в связи с некорректным (явным или неявным) использованием доп.код.потоков
"неявно" - здесь имеется ввиду, что доп.код.поток (один или более) вполне может создаваться ядром Аполло и уничтожаться "невовремя".. неустойчивость отказа понуждает мыслить как минимум в этом направлении
← →
Матлабист (2004-04-05 19:23) [4]Search -> Find Error -> $406cf0ca
Что дает?
← →
Anatta (2004-04-07 18:11) [5]>Digitman
А что такое "доп.код.поток"?
>Матлабист
>Search -> Find Error -> $406cf0ca
Проблема в том, что если такая ситуация возникает, когда я запускаю прогу из IDE, под управлением отладчика, то когда (при завершении программы) ошибка возникает, то последствия весь плачевные, т.е. процесс Делфи (того, как я пытаюсь предпринять какие-то дальнейшие действия из набора F9,F8,F7 и т.п.) начинает "жрать" 100% процессорного времени (видимо идут попытки что-то отладить), причем приходиться жать reset - иначе не получается убить процесс. Т.к. ошибка возникает особенно редко, то я не могу использовать предложенный Вами метод, однако все же, волей случая, однажды, мне удалось таки им воспользоваться, и при этом увидеть, что ошибка в теле метода TObject.Free. Только вот какой объект уничтожается я так и не узнал, т.к. все мои попытки опять обернулись тем, что IDE стала жрать 100% проц. времени. После этого, я больше не эксперементирую с IDE, а всегда сам запускаю exe-шник проги...
Т.ч. TObject.Free, но вот что может быть? Кстати, извините, что сразу не сказал про TObject.Free, все таки хотелось услышать всевозможные гипотезы причин данного явления.
← →
Anatta (2004-04-07 18:16) [6]>Digitman
А что такое "доп.код.поток"?
>Матлабист
>Search -> Find Error -> $406cf0ca
Проблема в том, что если такая ситуация возникает, когда я запускаю прогу из IDE, под управлением отладчика, то когда (при завершении программы) ошибка возникает, то последствия весь плачевные, т.е. процесс Делфи (того, как я пытаюсь предпринять какие-то дальнейшие действия из набора F9,F8,F7 и т.п.) начинает "жрать" 100% процессорного времени (видимо идут попытки что-то отладить), причем приходиться жать reset - иначе не получается убить процесс. Т.к. ошибка возникает особенно редко, то я не могу использовать предложенный Вами метод, однако все же, волей случая, однажды, мне удалось таки им воспользоваться, и при этом увидеть, что ошибка в теле метода TObject.Free. Только вот какой объект уничтожается я так и не узнал, т.к. все мои попытки опять обернулись тем, что IDE стала жрать 100% проц. времени. После этого, я больше не эксперементирую с IDE, а всегда сам запускаю exe-шник проги...
Т.ч. TObject.Free, но вот что может быть? Извините, что сразу не сказал про TObject.Free, все таки хотелось услышать всевозможные гипотезы причин данного явления.
← →
Cobalt © (2004-04-07 21:58) [7]Прояните такой момент - программа использует потоки явно? Т.е. вы создаёте/вызываете потоки? Если не знаете, то, скорее всего нет.
Сколько потоков в программе на самом деле? (Диспетчер задач, вид, колонки, счётчик потоков)
Где происходит завершение работы используемых DLL-ок? Они загружаются статически или динамически(LoadLibrary)?
← →
Digitman © (2004-04-08 08:14) [8]
> при этом увидеть, что ошибка в теле метода TObject.Free.
> Только вот какой объект уничтожается я так и не узнал
запроси у отладчика
self.ClassName
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.033 c