Форум: "Основная";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
ВнизОбхект и метод Free Найти похожие ветки
← →
PigMey (2003-10-07 20:35) [0]Может ли при вызове метода Free к какому-нибудь объекту возникать ошибка?
← →
Palladin (2003-10-07 20:38) [1]Запросто.
← →
HolACost! (2003-10-07 20:38) [2]ага! А что за ошибка-то?!
← →
Anatoly Podgoretsky (2003-10-07 20:51) [3]PigMey © (07.10.03 20:35)
Нет
← →
PigMey (2003-10-07 20:52) [4]Вообщем я начал создавать свой класс и решил проверить его работу. Если я пишу код:
MyClass.Create;
MyClass.Free;
То все ОК,
Но стоит только вписать какой-нибудь метод между ними, то вылетает ошибка Access Violation по такому-то адресу, почему?
← →
Anatoly Podgoretsky (2003-10-07 20:57) [5]Покажи объявление MyClass и где он создается, должет существовать до этих двух строк
← →
DiamondShark (2003-10-07 21:10) [6]
> почему?
Потому...
В строках
> MyClass.Create;
> MyClass.Free;
MyClass -- имя класса, или экземпляра? Ась?
Судя по тому, что компилятор пропускает, всё-таки экземпляра...
Думать дальше будем сами?
Или ликбез продолжим?
← →
Fay (2003-10-07 21:13) [7]Ку?
MyClass1 := MyClass.Create;
MyClass1.BlaBlaBla(BuBuBu);
MyClass1.Free;
← →
Anatoly Podgoretsky (2003-10-07 21:15) [8]Fay (07.10.03 21:13) [7]
Ну и что, все равно MyClass должен быть создат до этой строчки.
← →
PigMey (2003-10-07 21:16) [9]MyClass - имя экземпляра, а не класса
← →
Palladin (2003-10-07 21:18) [10]
> Anatoly Podgoretsky © (07.10.03 20:51) [3]
Здря Вы так, Анатолий :) Ошибок в деструкторе никто не отменял еще... и повторное удаление уже удаленного объекта (но не выставленного в Nil) тоже может вызвать AV
> PigMey © (07.10.03 20:52) [4]
Парень, MyClass.Create, так не пишут... MyClass:=TMyClass.Create; вот так пишут..
← →
Anatoly Podgoretsky (2003-10-07 21:25) [11]Palladin © (07.10.03 21:18) [10]
Не зря, во первых это не деструктор, а простая процедура, которая просто проверяет адрес объекта на Nil и если он не Nil то вызывает деструктор. Так что ошибке в ней быть не может, могут быть ошибки в деструкторе или недействительная переменная, но только не в Free
MyClass.Create точно также можно писать, это нормальный вызов конструктора, но только объект должен существовать.
← →
PigMey (2003-10-07 21:29) [12]Точно, вопросов больше нет - спасибо.
← →
Raduga (2003-10-08 12:49) [13]>Anatoly Podgoretsky
Почему не вылетает ошибка?
...
TMyClass=class
i:integer;
constructor Create();virtual;
destructor Destroy;override;
end;
...
var m:TMyClass;
...
begin
...
procedure Proc1;
begin
m:=TMyClass.Create;
m.i:=10;
m.Free;
m.i:=20;//-----------------вот сдесь---------------
end;
....
end;
← →
Raduga (2003-10-08 12:50) [14]>Anatoly Podgoretsky
Почему не вылетает ошибка?
...
TMyClass=class
i:integer;
constructor Create();virtual;
destructor Destroy;override;
end;
...
var m:TMyClass;
...
begin
...
procedure Proc1;
begin
m:=TMyClass.Create;
m.i:=10;
m.Free;
m.i:=20;//-----------------вот сдесь---------------
end;
....
end;
← →
Юрий Федоров (2003-10-08 12:51) [15]>>Raduga (08.10.03 12:49) [13]
Повезло.
Точнее не повезло
← →
Анонимщик (2003-10-08 12:55) [16]А не здесь разве:
m.Free - ?
Вообще вы все все позапутывали, особенно спрашивающего
← →
Anatoly Podgoretsky (2003-10-08 12:57) [17]Raduga (08.10.03 12:49) [13]
Ты в рубашке родился
← →
Raduga (2003-10-08 13:01) [18]>Юрий Федоров
А при чем сдесь везение, это тестовый вариант и он почему то работает...
>Анонимщик
>А не здесь разве:
>m.Free - ?
Сдесь ошибка не должна вылетать впринципе.
Почему срабатывает следующая строчка, вот в чем вопрос?
← →
Anatoly Podgoretsky (2003-10-08 13:03) [19]Ну так счастличик
← →
Raduga (2003-10-08 13:03) [20]Протестите САМИ
← →
Raduga (2003-10-08 13:06) [21]Сообщение об ощибке, только если явно выставляю в нил после m.free, т.е.
m.free
m:=nil;
m.i:=20;
← →
Verg (2003-10-08 13:07) [22]
> Raduga (08.10.03 13:01) [18]
> Почему срабатывает следующая строчка, вот в чем вопрос?
Она не срабатывает. Она просто не вызывает ошибку.
Когда на дороге пусто, можно же и зигзагами поездить, правильно?
← →
Palladin (2003-10-08 13:07) [23]счастливчик потому что кусок памяти по адресу m.i еще никем не используется, а может используется, вот только поймешь это ты ощутишь немного попозже... и будешь в недоумении, а чего это у тебя не работает ничего, откуда AV...
← →
Palladin (2003-10-08 13:08) [24]
> Когда на дороге пусто, можно же и зигзагами поездить, правильно?
:))
← →
Raduga (2003-10-08 13:10) [25]>Palladin
Спасибо
← →
Анонимщик (2003-10-08 13:25) [26]Raduga
Пардон, самопроизвольно попереставлял строки и вызовы.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c