Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.014 c
14-26761
Knight
2003-05-22 22:34
2003.06.09
Сканирование портов...


1-26510
Maks Realov
2003-05-29 16:30
2003.06.09
Области видимости


6-26627
chak
2003-04-06 11:13
2003.06.09
TServerClientThread !!???


14-26672
k-man
2003-05-24 09:54
2003.06.09
Glut 3.7


3-26330
Reals
2003-05-19 14:29
2003.06.09
Как узнать какое значение добавилось в поле AutoNumber базы...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский