Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.29;
Скачать: CL | DM;

Вниз

Tstrings или TstringsList   Найти похожие ветки 

 
Igor_thief ©   (2004-02-06 16:51) [0]

Вот блин слом. Короче создаю я свой клас, в котором описываю поле типа Tstrings. Далее я экземпляр этого класса сохраняю в виде объекта в листбоксе и освобождаю экземпляр. Потом, когда я обращаюсь к этому объекту выскакивает Access violation. В чем проблема? З.Ы.: я так понял, что теряется ссылка на строки Tstrings в памяти. Как обойти глюк?


 
Игорь Шевченко ©   (2004-02-06 16:55) [1]

Код в студию, телепатов нету


 
Внук ©   (2004-02-06 16:57) [2]

Думаю, это не "глюк", а обычное незнание


 
Юрий Зотов ©   (2004-02-06 16:57) [3]

1. Описывать надо, как TStrings, а вот содавать - TStringList (иначе нарветесь на abstract error).

2. Создали. Ссылку запомнили в ListBox"е. А вот уничтожать-то зачем? Ведь после уничтожения запомненная ссылка оказывается уже неверной - отсюда и Access Violation.

Уничтожать надо, но не сразу, а только когда объект уже будет реально не нужен.


 
Danilka ©   (2004-02-06 16:59) [4]


> Далее я экземпляр этого класса сохраняю в виде объекта в
> листбоксе и освобождаю экземпляр

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


 
}|{yk ©   (2004-02-06 17:04) [5]

Невозможно создать объект класса Tstrings, т.к. это базовый абстрактный класс


 
}|{yk ©   (2004-02-06 17:04) [6]

Невозможно создать объект класса Tstrings, т.к. это базовый абстрактный класс


 
Igor_thief ©   (2004-02-06 17:12) [7]

Юрий Зотов © (06.02.04 16:57) [3]
Было дело и с абстрактной ошибкой


 
Igor_thief ©   (2004-02-06 17:20) [8]

TTovarKind = class(TObject)
Name: string;
IconInd: integer;
FirmsList: TStringList;//или Tstrings
end;
...
AKind := TTovarKind.Create(Self);
begin
AKind.Name := s;
AKind.IconInd := 0;//default icon index
AKind.FirmsList.Add(s1);
lbTovars.Items.AddObject(s, AKind);
end;
AKind.Free;
Ну а потом ...
AKind.FirmsList.Assign(TTovarKind(lbTovars.Items.Objects[lbTovars.ItemIndex]).FirmsList)
и тут та компилятор начинает орать
Наверное лучше заменить tstringlist на динам. масив строк?


 
MBo ©   (2004-02-06 17:27) [9]

где код конструктора TTovarKind.Create?


 
}|{yk ©   (2004-02-06 17:28) [10]

AKind.Free лишнее
ты удаляешь объект, а потом к нему обращаешься


 
MBo ©   (2004-02-06 17:35) [11]

сразу и не рассмотрел

AKind.Free;
ну а потом ...
AKind.FirmsList.Assign(TTovarKind(lbTovars.Items.Objects

Вау!!!!
А раньше тебе удавалось к уничтоженным объектам обращаться?


 
Igor_thief ©   (2004-02-06 18:05) [12]

MBo © (06.02.04 17:35) [11]
Ой, народ, Я просто завтыкал и не отудова скопировал кусочек кода. После "Ну а потом ..." идет TTovarKind(lbTovars.Items.Objects[lbTovars.ItemIndex]).FirmsList такое обрачщение.
Сорри :о)


 
}|{yk ©   (2004-02-06 18:12) [13]

Да говорят же не надо удалять объекты после их добавления в листбокс
Удаляй их, например на закрытие формы
Ведь AddObject добавляет ссылки на объекты, а не сами объекты.
Потому и аксез виолатион


 
Igor_thief ©   (2004-02-06 19:54) [14]

}|{yk © (06.02.04 18:12) [13]
Понял! Ладно, как-то выкручусь! Мне не подъодит вариант без удаления. Я просто хочу делать все в цыкле. Но все равно спасибо!!!


 
Palladin ©   (2004-02-06 21:02) [15]

Да? Позвольте узнать причину, почему же этот вариант не подходит?


 
Igor_thief ©   (2004-02-07 15:48) [16]

Palladin © (06.02.04 21:02) [15]
Да вот и я сам решил узнать эту причину и был приятно удевлен. Причины уже просто нет. Вариант который мне подсказали подходит просто супер. Так что сорри за втык!:о) Но правда вылез один очень не прикольный баг. Короче обращаюсь я к свойству count и выжу ерунду, то есть полнейшее не соответсвие ситуации (вот как обращаюсь: TTovarKind(lbTovars.Items.Objects[lbTovars.ItemIndex]).FirmsList).



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

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
1-93885
-=GaLaN=-
2004-02-14 18:00
2004.02.29
Создание формы и ее удаление


9-93749
Micah
2003-08-01 18:55
2004.02.29
Первый крупный проект


1-93939
Lapor
2004-02-07 15:51
2004.02.29
Ошибка EResNotFound


1-93835
KJ
2004-02-18 16:59
2004.02.29
Как в ListView выделить строку?


7-94201
Bers
2003-12-11 11:12
2004.02.29
Загрузка процессора