![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]х.з.
твоя программа ты и разбирайся. неизвестно что у тебя там творится!