Вопрос знатокам Delphi - EAccessViolation read of address FFFFFFFA

программирование Delphi делфи

Программа (довольно большая) в одно и то же время, после одного и того же действия выдает эту ошибку: http://plasmon.rghost.ru/52923701/image.png

Ошибка возникает на последней строчке одной большой функции. Не зависимо, что это за строчка. При отладке, когда выполняю программу по шагам это выглядит так - за 3 строчки до конца функции все идеально, за 2 все идеально, на последней строчке перед "end;" тоже все идеально, на следующем шаге ошибка.

Меня в ошибке смущает адрес FFFFFFFA - может там что-то где-то упирается в потолок памяти? Как это проверить и отладить, исправить? Из-за чего вообще эта ошибка возникает? Я гуглил - не помогло.

Примечание:
Werewolf_, прошелся в окне cpu, но так и не понял, в чем там проблема. Ошибка вылетает при вызове блока LStrClr. Я так понимаю это значит, что программа пытается освободить динамическую память. Вот как выглядит строчка на которой возникает ошибка
http://rghost.ru/52936734/image.png
А вот на какой строчке ошибка в самой процедуре LStrClr
http://rghost.ru/52936738/image.png

Не могу понять, как определить, в чем проблема.

Примечание:
Я так понимаю, в регистр еах записывается адрес переменной, память которой надо освободить с помощью LStrClr, но непонятно, как мне из этой информации понять, что это за проблемная переменная...

Примечание:
Werewolf_, спасибо, вроде нашел подозреваемого: строку, переменную String, которая, похоже, имеет отношение к [ebp-58]. Как предотвратить очистку этой переменной? Я так понял, что это сборщик мусора глючит и убирает то, что не надо убирать?

Примечание:
Исправил эту ошибку, заменив эту переменную на переменную типа Integer. Но на том же самом месте появилась новая проблема. Исключение выглядит так: http://higgs.rghost.ru/52947581/image.png
Происходит при выполнении некой инструкции LStrArrayClr:
http://higgs.rghost.ru/52947592/image.png
Вот в этой строчке этой инстркции:
http://plasmon.rghost.ru/52947584/image.png

Это вообще нормальная ситуация, что в одном и том же месте вдруг появляются такие ошибки, когда их по идее вообще не должно быть. Может реально в этом месте где-то кончается память (судя по адресу FFFFFFFA) и это вызывает ошибку в этом месте, что бы там ни находилось?

Примечание:
Все, разобрался, спасибо, Werewolf_!))
Ответы:
Эта ошибка означает что была предпринята попытка чтения данных по адресу -6.
Причины ошибки могут быть разными:
обращение к объекту который освобожден,
неправильная работа с указателями и пр.
Очень хорошо, что ошибка повторяется - найти причину будет проще.
Для поиска причины можно воспользоваться окном отладчика CPU (Ctrl+Alt+C), вызвав его перед последней строчкой.
Далее в окне CPU по шагам проходим и запоминаем код который вызывает исключение.
пытаемся понять, что происходит - скорее всего очистка локальных переменных интерфейсов, вариантов или записей.
Определяем, где в коде была преждевременная очистка, исправляем код


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.