Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Invalid pointer operation при закрытии. Почему???


Луарвик ©   (2004-10-25 14:34:00) 

А еще, если юзать application.Destroy то вродь ошибок нет. Хотя в хелпе написано, чтоб "Never call Application.Destroy!!!"


Johnmen   (2004-10-26 10:43:00) [1]

Хм... А надо так

for I := Low(Table) to High(Table) do
 FreeAndNIL(Table[I])


begin...end   (2004-10-26 09:21:00) [2]

А я бы сделал так:

for I := 0 to High(Table) do
 FreeAndNIL(Table[I])


AlexKocharin   (2004-10-26 08:35:00) [3]


>For I:=0 To Length(Table)-1 Do Table[i].Free;
>Table := Nil;


А я бы сделал так:

for i:=0 to high(Table) do Table[i].Destroy;
setlength(Table,0);


Alx2   (2004-10-26 08:22:00) [4]

Вдогонку Alx2 ©   (26.10.04 08:19) [13]
Конечно, если Length(his) = Stringgrid1.Rowcount


Alx2   (2004-10-26 08:19:00) [5]

>Луарвик   (25.10.04 23:01)

for i:=0 to Stringgrid1.Rowcount-1do his[i]:=TStringList.Create;


Defunct   (2004-10-26 07:48:00) [6]

продолжу идею.

конечно же, после his:=nil происходят еще какие-то события, в обработчиках которых возможно есть обращения к освобожденному массиву. Вот и возникает исключение.


Defunct   (2004-10-26 00:55:00) [7]

> Луарвик   (26.10.04 00:14) [10]

Хамить здесь не нужно. В вашем посте проглядывается ирония в адрес Cobalt, как-будто он что-то не то сказал. На самом деле вы задали очень широкий ворос, и на удивление Cobalt все-таки как-то телепатически конкретизировал ваш вопрос, хотя мог бы просто промолчать или послать по адресу"как правильно задавать вопросы".

Массив из TStrings можно освободить так:

Table : Array of TString;

For I:=0 To Length(Table)-1 Do Table[i].Free;
Table := Nil;


Луарвик   (2004-10-26 00:14:00) [8]

if Cobalt.clever:=true then begin
скажи, как освободить массив из TStrings, потому что
his:=nil;
close;
не пашет!
end;


Cobalt   (2004-10-25 23:50:00) [9]

Мне так думается, что как раз в другом месте - там, где с этим  his работают и в конце-концов освобождают.

К сожалению, телепаты всё ещёв отпуске, поэтому сказать, что не так в работе с этой загадочной переменной
<telepat mode=on>
Это массив!
<telepat mode=off>

сказать не могу :(


Луарвик   (2004-10-25 23:01:00) [10]

Гм. (...не обращая внимания на издевки...)

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=0 to Stringgrid1.Rowcount do his[i]:=TStringList.Create;
end;

Че то с этой строкой. Если убрать - ошибки нет.


Pentium133   (2004-10-25 15:31:00) [11]

Ага! Halt-гитлер!


clickmaker   (2004-10-25 15:28:00) [12]


> [5] Johnmen ©   (25.10.04 14:57)
> >Ага, сразу после Application.Initialize - ошибка должна
>
> >исчезнуть.
>
> Не надо путать Halt и Application.Terminate

Чиста реальные пацаны юзают только Halt. Быстро и безболезненно


Johnmen   (2004-10-25 14:57:00) [13]

>Ага, сразу после Application.Initialize - ошибка должна
>исчезнуть.

Не надо путать Halt и Application.Terminate


Pentium133   (2004-10-25 14:51:00) [14]


> лучше юзать Halt()

Ага, сразу после Application.Initialize - ошибка должна исчезнуть.


clickmaker   (2004-10-25 14:42:00) [15]


>  Луарвик   (25.10.04 14:34)
> А еще, если юзать application.Destroy

лучше юзать Halt()


Johnmen   (2004-10-25 14:41:00) [16]

Обращение по несуществующему указателю.
И ещё.
Если установлен знак "Проезда нет. Впереди обрыв", то ты конечно можешь на него наплевать...


Pentium133   (2004-10-25 14:37:00) [17]

х.з.
твоя программа ты и разбирайся. неизвестно что у тебя там творится!


Наверх

Титульная страница Поиск, карта сайта Написать письмо