Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.20;
Скачать: [xml.tar.bz2];

Вниз

Область видимости объектов   Найти похожие ветки 

 
voodoo_alex   (2002-06-07 12:07) [0]

Народ вот такая возникла ситуация:
Есть 2 объекта TResultSet и TResultSetList.
У второго есть поле SetList : TList и метод Add

procedure TResultSetList.Add;
begin
CurrentRow := SetList.Add(TResultList.Create);
end;

в программе есть следующие строки:
.....
var
MainResultSetList : TResultSetList;
....
....
MainResultSetList.Add;
Name1 := EditName1.Text;
....

После первой команды MainResultSetList.SetList.Items[0]^ - указывает на нормальный новосозданный объект класса TResultSet.

После вырполнения следующей строчки (неважно какая, лишь бы там Этот MainResultSetList.SetList.Items[0]^ не использовался) по адресу где новосозданный объект лежал пишется куча мусора. Я так понял что как бы объект вышел из области видимости и дельфи его бабахнул. Ну а как тогда быть в такой ситуации ???

Помогите пожалуйста, вторую ночь не сплю ;(((


 
AFROLOV   (2002-06-07 12:12) [1]

надо не через var - объект создается в стеке. При выходе из области видимости объект будет удален или это может еще раньше сделать оптимизатор.
Такие веши надо делать через new и dispose.


 
voodoo_alex   (2002-06-07 12:25) [2]

То есть

Add:
T := New(TResultSet);
T.Create;
SetList.Add(T)

destructor:
for i := 0 to (SetList.Count-1) do
Dispose(SetList.Items[i]);

Я правильно понял ?


 
Anatoly Podgoretsky   (2002-06-07 12:27) [3]

DВ приведенном коде нет ошибок, ошибка не в приведенном коде


 
Digitman   (2002-06-07 12:35) [4]

>voodoo_alex

Между терминами "область видимости" идентификатора и "время жизни" объекта/переменной (см. "Делфи его бабахнул") нет ничего общего.

см. Anatoly Podgoretsky © (07.06.02 12:27)


 
voodoo_alex   (2002-06-07 12:51) [5]

я просто не так выразылся, имел в виду время жизни конечно


 
Digitman   (2002-06-07 13:17) [6]

Раз не так выразился, будь любезен прокомментировать это :

>>в программе есть следующие строки:
>>.....
>>var
>> MainResultSetList : TResultSetList;


Программа - штука растяжимая, и в данном случае время жизни переменной MainResultSetList напрямую зависит от того, ГДЕ "в программе есть следующие строки".
Посему приводи по возможности полный код (полные описания всех подпрограмм, использующих эту переменную), если теряешься в понимании происходящего


 
voodoo_alex   (2002-06-07 14:11) [7]

я не терялся а спрашивал правильный способ, но на будушее учту ;)
а вобще подсказали делать TResultSetList = class(TObjectList)
вот такой способ и буду реализовать ;)
Спасиб ;)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.06.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.005 c
3-64908
Pokotskiy
2002-05-24 23:16
2002.06.20
Что делать? Имя итаблици в роли параметра хранимой процедури!


3-64893
Yuri K.
2002-05-24 18:46
2002.06.20
Подключение к SQL серверу через ADO


7-65263
sir_musatov
2002-03-22 12:36
2002.06.20
как программно вывести Комп из спящего режима ???


7-65257
Sergey13
2002-03-19 10:02
2002.06.20
Не хватает GDI ресурсов


7-65269
TOLTEC
2002-03-22 02:25
2002.06.20
Сервис и Tray





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский