Текущий архив: 2003.05.22;
Скачать: CL | DM;
Вниз
Мастера подскажите как определить где возникает ошибка! Найти похожие ветки
← →
jen_bond (2003-05-11 22:55) [0]При закрытие приложения возникает ошибка Access Valiation по адресу ..... Каким образом можно отладить, и найти место где возикает эта ошибка!!!!
← →
default (2003-05-11 22:56) [1]напиши код
и всё будет тип-топ
← →
Vasiliy (2003-05-11 23:09) [2]Гдето выполняешь Object.Free когда Object = nil
← →
evvcom (2003-05-12 03:07) [3]
> Vasiliy (11.05.03 23:09)
> Гдето выполняешь Object.Free когда Object = nil
Вовсе нет. На такие ошибки обычно Delphi сама выкидывает в отладчик. В данном случае ошибка выскакивает во время финализации юнитов/проекта. Я недавно такую искал. Оказалось, забыл в деструкторе написать MyComponent.Free; (в конструкторе было MyComponent := TMyComponent.Create(nil);) Т.е. компонент создавался, но за автоматическое уничтожение его никто не отвечал. Аналогично с TObject.
← →
Morfein (2003-05-12 03:54) [4]>>jen_bond
Обычно ошибка при закрытии программы выскакивает при неправильной работе с массивами... т.е. Вы где-то вышли за верхнюю границу массива в каком-то объекте(TMemo, TStringList, TList,...). Из-за резервирования памяти блоками, перезапись этой области отзывается ошибкой не сразу, а при уничтожении объекта.
>>Vasiliy
>>Гдето выполняешь Object.Free когда Object = nil
Это не запрещено. Метод Free производит проверку существования объекта.
← →
Anatoly Podgoretsky (2003-05-12 08:07) [5]Метод Free не производит проверку существования объекта, только назначено что либо переменной или нет, точно такой же источник для ошибки.
Obj := TObj.Create;
Obj.Free;
Obj.Free; имеем ошибку, а по твоей логике не должно быть, так как Free проверил, что объекта нет.
← →
Morfein (2003-05-12 10:29) [6]procedure Free;
Description
Use Free to destroy an object. Free automatically calls the destructor if the object reference is not nil. Any object instantiated at runtime that does not have an Owner should be destroyed by a call to Free, so that can be properly destroyed and the memory released. Unlike Destroy, Free is successful even if the object is nil, so if the object was never initialized, Free won’t result in an error.
© Delphi Help
Интересно получается... если объект никогда не был создан, то Free можно вызывать, а если создан и уже уничтожен, то нельзя...
← →
Palladin (2003-05-12 10:34) [7]
> Morfein © (12.05.03 10:29)
если создан и просто уничтожен то можно, но если он еще при уничтожении выставлен в Nil (например FreeAndNil(Obj)), то конечно же нельзя
← →
han_malign (2003-05-12 10:35) [8]>Access Valiation по адресу .....
- вообще есть мизерный шанс локализовать строку где возникает ошибка по Map файлу, но в это место отладчик обычно и сам приходит...
← →
Anatoly Podgoretsky (2003-05-12 10:39) [9]Morfein © (12.05.03 10:29)
Это у тебя интересно получается, если объект не создан, то точно также нельзя вызывать Free, тем более что в качестве доказательства ты сам же привел выписку из хелпа. Free безопасно вызвать если переменная имеет значение NIL, вне зависимости был создан объект или нет. И ничего другого.
Palladin © (12.05.03 10:34)
Ты чего то не то сказал :-)
← →
Mikelson (2003-05-12 10:50) [10]Почему бы не скомпилировать проект с debug dcu и по шагам посмотреть весь процесс завершения работы приложения?
← →
default (2003-05-12 14:23) [11]заглянули бы в исходник Free и вопросов бы не было...
← →
Palladin (2003-05-12 14:40) [12]звиняйте...
реализация free меня все время с толку сбивает, отождествление с Destroy...
Страницы: 1 вся ветка
Текущий архив: 2003.05.22;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.006 c