Форум: "Основная";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];
ВнизCLoseForm Найти похожие ветки
← →
Rise (2003-05-28 18:35) [0]что за глюк и как его избежать. При закрытии приложения Делфи показывает что приложение еще работает!!!????
делаешь в CLoseForm
for i:=0 to 7 do BufTable[i]:=nil;
( BufTable:array[1..7] of array of Tcolor;)
Application.Terminate;
выдает Access vialetion!
← →
Rise (2003-05-28 18:39) [1]Я так думаю чт это из-за динамического массива, потому что если я его не заполняю то приложение нормально закрываеться, но я же очищая за собой этот массив
← →
Skier (2003-05-28 18:39) [2]Не иначе как у тебя ошибка в приложении.
← →
Rise (2003-05-28 18:42) [3]Когда я пересатю работать с этим массивом(коментирую все действия с ним) то оно номально закрываеться, но во время работы с ним ошибок не выдает, но при закрытии кричит благим матом ACCESS VIOLETION по какомуто там адресу(если вставляю Application.Terminate; )
а без него делфи показывает что оно еще работает
← →
Skier (2003-05-28 18:44) [4]>Rise © (28.05.03 18:42)
Код работы с "этим массивом" покажешь ? Али как ?
← →
xxxxxxxx (2003-05-28 18:44) [5]???
for i:= 0 to 7 do BufTable[i]:=nil;
( BufTable:array[ 1..7] of array of Tcolor;)
← →
Юрий Зотов (2003-05-28 18:45) [6]BufTable := nil.
И все.
← →
Rise (2003-05-28 18:45) [7]а да это просто я опечатался здесь
for i:=1 to 7 do
BufTable[i]:=nil;
Free;
Application.Terminate;
← →
Rise (2003-05-28 18:46) [8]Юрий Зотов © (28.05.03 18:45)
BufTable := nil.
И все.
так незя BufTable массив динамических массивов вот и приходиться в цикле каждый обулять
← →
Skier (2003-05-28 18:46) [9]for i:= 0 to 7 do
← →
Юрий Зотов (2003-05-28 18:47) [10]Елы-палы, не обратил внимания, что это же двумерный массив...
Значит, просто исправьте нижний индекс.
← →
Serginio (2003-05-28 18:48) [11]Интересно в чем смысл
for i:=0 to 7 do BufTable[i]:=nil;
Если type TColor = -$7FFFFFFF-1..$7FFFFFFF;
Я еще понимаю for i:=1 to 7 do BufTable[i]:=TColor(0);
Массив начинается с 1.
← →
Rise (2003-05-28 18:54) [12]я извиняюсь я здесь описался у меня с 1 начинаеться цикл
(for i:=1 to 7 do BufTable[i]:=nil;)
не так не так не работает Выдает
ACCESS VIOLETION по какомуто там адресу если вставляю
Application.Terminate, а если нет то делфи показывает что приложение "ЗАПУЩЕНО"
по ctrl+f2 закрываеться без ошибки-может Делфи глючит хотя два раза перегружался
← →
Anatoly Podgoretsky (2003-05-28 18:57) [13]Serginio (28.05.03 18:48)
Он освобождает семь динамических массивов цветов, иначе и нельзя, но зато он самоуверенный молодой человек, который отключил проверку выхода за пределы, поскольку уверен, что в его программе ошибок не будет, а безопасный код писать не умеет.
← →
Serginio (2003-05-28 18:59) [14]Объясни зачем при закрытии формы тебе нужен этот алгоритм
for i:=1 to 7 do BufTable[i]:=nil.
for i:=1 to 7 do
BufTable[i]:=nil;
Free; ????
Application.Terminate;
← →
Skier (2003-05-28 19:00) [15]>Rise © (28.05.03 18:54)
Динамические массивы, я надеюсь, ты создаёшь (SetLength(...)) ?
← →
Rise (2003-05-28 19:02) [16]Anatoly Podgoretsky © (28.05.03 18:57)
Я могу предположить, что вероятно в настройках делфи что-то не так поповоду выделения динамической памяти, а что касаеться кода, то он работает без ошибок(может вызываться без всяких проблем неоднократно), вопрос в освобождении использованной памяти... я могу так предположить
← →
Rise (2003-05-28 19:03) [17]Skier © (28.05.03 19:00)
>Rise © (28.05.03 18:54)
for i:=1 to 7 do
SetLength(BufTable[i],(account+1)*5+1);//account -константа
конечно
← →
Rise (2003-05-28 19:06) [18]еще самое интересное что вызываеться автоматически дебагех
← →
Serginio (2003-05-28 19:11) [19]2 Anatoly Podgoretsky Извини не заметил, что динамический массив.
Тогда уж лучше
for i:=1 to 7 do
SetLength(BufTable,0)
Еще после Free идет Application.Terminate Очень интересное решение. Интересно оно вызывается???
← →
Skier (2003-05-28 19:14) [20]>Serginio (28.05.03 19:11)
> Тогда уж лучше
> for i:=1 to 7 do
> SetLength(BufTable,0)
Finalize(...)
← →
Serginio (2003-05-28 19:19) [21]2(Skier) Согласен, но хрен редьки не слаще.Но мне почемуто мой подход больше нравится.Проверен временем.Хотя и nil должен срабатывать. Проблема во Free
← →
Skier (2003-05-28 19:19) [22]>Rise © (28.05.03 19:03)
снеси Free; и Application.Terminate; Оно не нужно...
← →
Юрий Зотов (2003-05-28 19:22) [23]Если форма главная, то не надо никаких Terminate, выбросьте эту строку. И если индексы соответствуют, то с массивом все у Вас верно, причина не в этом. Ищите, где Вы не даете главной форме нормально закрыться.
← →
Skier (2003-05-28 19:23) [24]>Serginio (28.05.03 19:19)
Ну не знаю...не знаю...IMHO, в хэлпе про "способ"
SetLength(DynArray,0) как способ освобождения дин. массива
ничего не сказано...
Я не игрался с SetLength(...,0) но не думаю что это
освобождает дин. массив. Хотя все может быть...
← →
Anatoly Podgoretsky (2003-05-28 19:24) [25]Ну какже правильно
for i:=0 to 7 do BufTable[i]:=nil;
( BufTable:array[ 1..7]
А проверка выключена, что портится при i = 0 можно только догадываться.
← →
Anatoly Podgoretsky (2003-05-28 19:29) [26]Rise © (28.05.03 18:54)
А вот это ACCESS VIOLETION говорит что где то неверный адрес.
Потом непонятно, что именно Free, какому объекту.
← →
Serginio (2003-05-28 19:31) [27]2(Skier) А как по твоему str:String;
str:=""; и SetLength(str,0) не одно и тоже. Так как работа с динамическими массивами полностью лежит на Компиляторе лучше выбирать более понимаемые вещи.
← →
Serginio (2003-05-28 19:38) [28]2(Skier) А этот динамический массив и уничтожать не надо, в том контексте как задумано у автора. Если уж терминировать приложение все динмические объекты уничтожаться сами, ты же не уничтожаешь все строки??? Код очень оригинальный. А приложение не терминируется так как до него очередь не доходит а гдето в коде может идти обращение уже не к существующему массиву.
← →
Skier (2003-05-28 19:40) [29]>Serginio (28.05.03 19:31)
Да. Ты прав. Проверил. Для Finalize(str) и для
SetLength(str,0) procedure _LStrClr(var S: AnsiString); отрабатывает одинаково...
← →
Skier (2003-05-28 19:44) [30]
> Если уж терминировать приложение все динмические объекты
> уничтожаться сами, ты же не уничтожаешь все строки???
Иногда бывает нужно убивать динмические объекты (вернее переменные с контролируемым временем жизни) руками, иначе бы
Borland не отдал бы процедуру Finalize программисту.
Хотя для кода автора это вряд ли актуально...:)
← →
Serginio (2003-05-28 19:45) [31]2(Skier) Спасибо. Намотаю на ус.
← →
evvcom (2003-05-29 01:31) [32]
> Serginio (28.05.03 19:38)
> 2(Skier) А этот динамический массив и уничтожать не надо,
> в том контексте как задумано у автора.
Поддерживаю, хотя и не сторонник таких громких фраз в данном контексте как "не надо". Я бы заменил на "не обязательно".
> Skier © (28.05.03 19:44)
И с этим тоже спорить не буду.
Я пару раз прослеживал, как происходит очистка подобных структур. Это просто класс! Borland в этом вопросе постарался. Там так все увязано, что код пробегает по всем указателям и все подчищает. Так что...
> Rise ©
По поводу Free и Terminate я бы советовал послушать больших дядей, они доброму научат.
← →
VMcL (2003-05-29 02:19) [33]>Rise (28.05.03 18:45)
В OnClose (или OnCloseQuery) уничтожаешь закрываемую форму и удивляешься, что у тебя AV и приложение остаётся работать? Счастливого полёта...
← →
Alex44 (2003-05-29 10:49) [34]A ne v Free li oshibka?
← →
Rise (2003-05-29 10:57) [35]VMcL © (29.05.03 02:19)
В OnClose (или OnCloseQuery) уничтожаешь закрываемую форму и удивляешься, что у тебя AV и приложение остаётся работать? Счастливого полёта...
Я же писал что если в OnClose не вставить принудительное закрытие формы то Делфи показывает что оно еще ЗАПУЩЕНО, хотя все формы закрываються(исчезают, и вывполняеться OnClose, НО делфи показывает что он еще запущено!!)
← →
pasha_golub (2003-05-29 11:57) [36]А мне кажется, что прав VMcL и в OnClose таких штук делать нельзя, ИМХО
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.009 c