Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странная ошибка при вызове деструктора, Invalid pointer operation 
:(
    Опции темы
Cheburek
Дата 6.8.2006, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 26.3.2006

Репутация: нет
Всего: 1



Откуда вообще такая могла произоити??? Не понимаю!!  smile 
Деструктор
Код

destructor OptOs.Destroy;
begin
    SetLength(KoafPr,0,0);
    SetLength(YgNorm,0,0);
  inherited;
end;

вызов
Код

s.Destroy;
s := nil;


ну все стандартно .... хоть какие-нибуть варианты почему может произоити такая ошибка в данном случае есть?

Это сообщение отредактировал(а) Cheburek - 6.8.2006, 09:35
PM MAIL   Вверх
Angel_19
Дата 6.8.2006, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 5.4.2005

Репутация: нет
Всего: нет



Попробуй вызвать

Код

s.free;
s:=nil;

PM ICQ   Вверх
Cheburek
Дата 6.8.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 26.3.2006

Репутация: нет
Всего: 1



Angel_19
Аналогичная ошибка.

Кстати, если в теле деструктора вообще ничего не написать, 
Код

destructor OptOs.Destroy;    
begin    
   {все равно при вызове происходит эта ошибка}
end;


всеравно аналогичная ошибка...

вот я думаю - это код у меня что-ли до такой степени глючный, или делфи =)?

ps Кто захочет посмотреть программу могу выложить на ftp 
PM MAIL   Вверх
Sunr1se
Дата 6.8.2006, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 1.5.2006

Репутация: 6
Всего: 13



Я у себя попробовал сделать класс с полями KoafPr и YgNorm и с таким же деструктором, как у тебя. Все работает без ошибок.
Выложи, пожалуйста, полностью код, попробую что-нибудь понять ;)
--------------------
IRC-канал Винграда 
PM MAIL ICQ   Вверх
Cheburek
Дата 6.8.2006, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 26.3.2006

Репутация: нет
Всего: 1



Код

{внизу можно скачать все исходники}


весь каласс =) со всяким временным мусором в юните ))) щас времени нет - а вот через пару часиков смогу залить весь код на ftp потому как по одному этому юниту нифега не понять ...

Это сообщение отредактировал(а) Cheburek - 6.8.2006, 20:26
PM MAIL   Вверх
Alexeis
Дата 6.8.2006, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Cheburek, нужно знать какая строчка вызывает ошибку, создается впечатление, что этот класс здесь ни при чем.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Cheburek
Дата 6.8.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 26.3.2006

Репутация: нет
Всего: 1



Вот вообщем-то вся программа. Помогите люди добрые!! Ошибка  в обработке в главном меню пункт "Закрыть документ". Временно там поставлен перехвадчик ошибок...
исходный код

alexeis1
но компилятор не сообщает строчки = ) ..... может опять что-то проглядел = ( ... вообще сложно не согласиться ...

Это сообщение отредактировал(а) Cheburek - 6.8.2006, 13:23
PM MAIL   Вверх
Alexeis
Дата 6.8.2006, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Cheburek @  6.8.2006,  13:19 Найти цитируемый пост)
но компилятор не сообщает строчки

Для этого существует трасировка!


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
jack128
Дата 6.8.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 18.5.2005

Репутация: 2
Всего: 4



обычна эта ошибка говорит о том, что ты пытаешься уничтожить уже несуществующий или вообще не созданный объект. Везде, где уничтожаешь объекты - используй FreeAndNil(), тогда ситуация возможно прояснится.
PM MAIL   Вверх
Cheburek
Дата 6.8.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 26.3.2006

Репутация: нет
Всего: 1



jack128, Invalid pointer operation  ???? 

alexeis1
Трасировка показывает на вызов деструктора, исхродники все же выложил, если не сложно посмотрите.

Еще раз если до этого было не заметно =)
исходный код

Это сообщение отредактировал(а) Cheburek - 6.8.2006, 19:42
PM MAIL   Вверх
jack128
Дата 6.8.2006, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 18.5.2005

Репутация: 2
Всего: 4



Цитата(Cheburek @  6.8.2006,  19:38 Найти цитируемый пост)
jack128, Invalid pointer operation  ???? 

иммено. ПРичем совсем не обязательно речь об объекте в котором возникает это исключение. Хотя и достаточно вероятно.
PM MAIL   Вверх
Cheburek
Дата 6.8.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 26.3.2006

Репутация: нет
Всего: 1



jack128, Ну это вообще нереально ... Объект создаеться один раз и удаляеться один раз. Внутри объекта другие объекты вообще не используються ...
PM MAIL   Вверх
jack128
Дата 6.8.2006, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 18.5.2005

Репутация: 2
Всего: 4



Цитата(Cheburek @  6.8.2006,  20:15 ) 
Внутри объекта другие объекты вообще не используються ...  


Да, в твоем случае причина была в другом.

Ты почему ко компилируешь свою программу без range check'ов что и приводит к трудно уловимым ошибкам.

в методе procedure OptOs.OFRLinze(h,R,xs,Nsr:real;pic:TImage;k,THColor:integer);

вот в этой строчке    
Код

    FOR y := round(WinY/2-(h/2)) TO  round(WinY+(h/2)) DO begin
        YgNorm[round(xs),y] := 0;

 
 


у тя происходит выход за диапозон массова..  В результате бьется память, и при попытке файлализировать дин массив - ты и получаешь свой Invalid pointer operation.
Если бы у тя изначально строяла проверка диапозонов - ты сам быстро обнаружил ошибку.

Вывод:  в меню Project/Options - закладка Compiler/Runtime Errors - первая и третья галки всегда должны быть включены. Кроме особо оговоренных случаев. 

Это сообщение отредактировал(а) jack128 - 6.8.2006, 23:17
PM MAIL   Вверх
Cheburek
Дата 8.8.2006, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 26.3.2006

Репутация: нет
Всего: 1



Спасибо. Репутацию изминить не могу =(, может когда наберу достаточное количество сообщений, то поставлю плюс.

А что там за ошибки с битмапами.

в методе procedure OptOs.OFRLinze(h,R,xs,Nsr:real;pic:TImage;k,THColor:integer);
Код

         p := b.scanline[tempy];
         p[round(tempx-xs)].r := byte(THColor);


Это сообщение отредактировал(а) Cheburek - 8.8.2006, 10:37
PM MAIL   Вверх
jack128
Дата 9.8.2006, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 18.5.2005

Репутация: 2
Всего: 4



Цитата(Cheburek @  8.8.2006,  09:58 Найти цитируемый пост)
А что там за ошибки с битмапами.

гы. успел прочитать таки? smile

Код

type
  ARGB = array[0..1] of TRGB;
  PARGB = ^ARGB;

вот так нельзя объявлять указатели на массивы.  Лудше писать так:

Код

type
  ARGB = array[0..MaxInt div SizeOf(TRGB) - 1] of TRGB;
  PARGB = ^ARGB;

именно по причине исключений, которые будут кидаться при компиляции с $R+  Например посмотри как подобные массивы объявлены у борланда, PPointerList и тд..

PM MAIL   Вверх
Cheburek
Дата 10.8.2006, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 26.3.2006

Репутация: нет
Всего: 1



jack128, Честно говоря ничего не понял. Не знаешь где на эту тему можно что-нибуть почитать ... а то даже по каким словам искать материал на эту тему не знаю...


Цитата(jack128 @  9.8.2006,  23:49 Найти цитируемый пост)
код Pascal/Delphi    
Код
    
type    
  ARGB = array[0..1] of TRGB;    
  PARGB = ^ARGB;
    

вот так нельзя объявлять указатели на массивы.  Лудше писать так:


этот код кстати был взят из фака этого сайта )

PM MAIL   Вверх
bems
Дата 13.8.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(Cheburek @  10.8.2006,  09:54 Найти цитируемый пост)
этот код кстати был взят из фака этого сайта )
а там вероятно переведен с Си smile 



--------------------
Обижено школьников: 8
PM MAIL   Вверх
VMChaZ
Дата 15.8.2006, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.8.2006

Репутация: нет
Всего: нет



2 Cheburek
воспользуйся списками вместо массивов. если свой тип списка делать лень, - то TStringlist с AddObject.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1324 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.