Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-65324
Andrey V.
2003-09-30 11:11
2003.10.20
Как создать событие


14-65586
Молодой
2003-10-02 17:08
2003.10.20
Программа генерации голоса


4-65668
Senator
2003-08-14 10:29
2003.10.20
доступ к папке


1-65533
FreeSky
2003-10-08 10:06
2003.10.20
Использование шрифтов...


3-65334
Relaxxx
2003-09-30 16:09
2003.10.20
Master-deteil(продолжение)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский