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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.027 c
1-26509
OlegM
2003-05-28 20:41
2003.06.09
Помогите разобраться с динамически создаваемыми компонентами


1-26451
Rise
2003-05-29 11:48
2003.06.09
_SystemTime


3-26342
jack100
2003-05-19 10:42
2003.06.09
У кого есть опыт работы с ExpressQuantumGrid?


8-26619
Маришка
2003-02-26 09:58
2003.06.09
мспользование микрофона


1-26489
Zelius
2003-05-27 15:05
2003.06.09
Как отлавливать ВСЕ Exceptionы программы с помощью JclDebug?