| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Странная ошибка при вызове деструктора |
| Автор: Cheburek 6.8.2006, 09:33 | ||||
| Откуда вообще такая могла произоити??? Не понимаю!! Деструктор
вызов
ну все стандартно .... хоть какие-нибуть варианты почему может произоити такая ошибка в данном случае есть? |
| Автор: Angel_19 6.8.2006, 10:36 | ||
Попробуй вызвать
|
| Автор: Cheburek 6.8.2006, 10:52 | ||
| Angel_19, Аналогичная ошибка. Кстати, если в теле деструктора вообще ничего не написать,
всеравно аналогичная ошибка... вот я думаю - это код у меня что-ли до такой степени глючный, или делфи =)? ps Кто захочет посмотреть программу могу выложить на ftp |
| Автор: Sunr1se 6.8.2006, 10:56 |
| Я у себя попробовал сделать класс с полями KoafPr и YgNorm и с таким же деструктором, как у тебя. Все работает без ошибок. Выложи, пожалуйста, полностью код, попробую что-нибудь понять ;) |
| Автор: Cheburek 6.8.2006, 11:50 | ||
весь каласс =) со всяким временным мусором в юните ))) щас времени нет - а вот через пару часиков смогу залить весь код на ftp потому как по одному этому юниту нифега не понять ... |
| Автор: Alexeis 6.8.2006, 12:46 |
| Cheburek, нужно знать какая строчка вызывает ошибку, создается впечатление, что этот класс здесь ни при чем. |
| Автор: Cheburek 6.8.2006, 13:19 |
| Вот вообщем-то вся программа. Помогите люди добрые!! Ошибка в обработке в главном меню пункт "Закрыть документ". Временно там поставлен перехвадчик ошибок... http://megafizz.com/cheburek/ray.rar alexeis1 но компилятор не сообщает строчки = ) ..... может опять что-то проглядел = ( ... вообще сложно не согласиться ... |
| Автор: Alexeis 6.8.2006, 15:27 |
Для этого существует трасировка! |
| Автор: jack128 6.8.2006, 16:05 |
| обычна эта ошибка говорит о том, что ты пытаешься уничтожить уже несуществующий или вообще не созданный объект. Везде, где уничтожаешь объекты - используй FreeAndNil(), тогда ситуация возможно прояснится. |
| Автор: Cheburek 6.8.2006, 19:38 |
| jack128, Invalid pointer operation ???? alexeis1, Трасировка показывает на вызов деструктора, исхродники все же выложил, если не сложно посмотрите. Еще раз если до этого было не заметно =) http://megafizz.com/cheburek/ray.rar |
| Автор: jack128 6.8.2006, 20:07 |
иммено. ПРичем совсем не обязательно речь об объекте в котором возникает это исключение. Хотя и достаточно вероятно. |
| Автор: Cheburek 6.8.2006, 20:15 |
| jack128, Ну это вообще нереально ... Объект создаеться один раз и удаляеться один раз. Внутри объекта другие объекты вообще не используються ... |
| Автор: jack128 6.8.2006, 23:11 | ||
| Цитата(Cheburek @ 6.8.2006, 20:15 ) Внутри объекта другие объекты вообще не используються ... Да, в твоем случае причина была в другом. Ты почему ко компилируешь свою программу без range check'ов что и приводит к трудно уловимым ошибкам. в методе procedure OptOs.OFRLinze(h,R,xs,Nsr:real;pic:TImage;k,THColor:integer); вот в этой строчке
у тя происходит выход за диапозон массова.. В результате бьется память, и при попытке файлализировать дин массив - ты и получаешь свой Invalid pointer operation. Если бы у тя изначально строяла проверка диапозонов - ты сам быстро обнаружил ошибку. Вывод: в меню Project/Options - закладка Compiler/Runtime Errors - первая и третья галки всегда должны быть включены. Кроме особо оговоренных случаев. |
| Автор: Cheburek 8.8.2006, 09:58 | ||
| Спасибо. Репутацию изминить не могу =(, может когда наберу достаточное количество сообщений, то поставлю плюс. А что там за ошибки с битмапами. в методе procedure OptOs.OFRLinze(h,R,xs,Nsr:real;pic:TImage;k,THColor:integer);
|
| Автор: jack128 9.8.2006, 23:49 | ||||
гы. успел прочитать таки?
вот так нельзя объявлять указатели на массивы. Лудше писать так:
именно по причине исключений, которые будут кидаться при компиляции с $R+ Например посмотри как подобные массивы объявлены у борланда, PPointerList и тд.. |
| Автор: bems 13.8.2006, 18:06 |
| а там вероятно переведен с Си |
| Автор: VMChaZ 15.8.2006, 01:40 |
| 2 Cheburek воспользуйся списками вместо массивов. если свой тип списка делать лень, - то TStringlist с AddObject. |