Ошибка с динамическим массивом..
Вобщето Finalize - освобождает память в куче только в том случае если никакая другая переменная уже не ссылается на данный массив. Попробуй прписвоить массиву Nil.(помоему так даже в учебнике рекомендуют, попройся в доке)
Наверное. Ещё только пришёл - ещё не успел глянуть. Зато вспомнилось ещё одно обстоятельство, я пытался определить длину динамического массива с помощью ф-ции
Length(<name>). После этого начинаются глюки. Может быть в Length где-то остаётся что-то??
(В конечном итоге - мне нужно переопределять длину динамич. массива - а как это сделать? Вот я и проверял на ненулевую длину - и если массив имеет ненулевой размер - я его Finalize, и по новой инициализирую).
1.Объявляешь временный дин. массив, таккойже 2.размерностью, как и рабочий
3.перегоняешь все значения во временный
4.рабочему присваиваешь NIL
5.указываешь новую размерность рабочего массива
6.пререгоняешь из временного в рабочий.
(я бы сделал так)
попробуй так:
1.Объявляешь временный дин. массив, таккойже 2.размерностью, как и рабочий
3.перегоняешь все значения во временный
4.рабочему присваиваешь NIL
5.указываешь новую размерность рабочего массива
6.пререгоняешь из временного в рабочий.
(я бы сделал так)
Но ведь это будет утечка памяти!!!!:-o
Массиву присваивать NIL без освобождения памяти....
Но ведь это будет утечка памяти!!!!:-o
Массиву присваивать NIL без освобождения памяти....
У каждого массива есть счетчик ссылок (как у COM классов) и при присвоении nil этот счетчик ссылок уменьшается, а если массив присваивается другому массиву, то сам массив не копируется а просто увеличивается счетчик ссылок на исходный. Вот поэтому две переменных могут ссылатся на один и тот же кусок памяти и если ты освободил его при помоще finalize, то во тебе и AV. Короче надо присваивать nil, а не finalize делать.
У каждого массива есть счетчик ссылок (как у COM классов) и при присвоении nil этот счетчик ссылок уменьшается, а если массив присваивается другому массиву, то сам массив не копируется а просто увеличивается счетчик ссылок на исходный. Вот поэтому две переменных могут ссылатся на один и тот же кусок памяти и если ты освободил его при помоще finalize, то во тебе и AV. Короче надо присваивать nil, а не finalize делать.
Огромное thnks за разъяснения. Сам наверное ещё долго бы копался P(
???????? thnks ?? ???????????. ??? ???????? ??? ????? ?? ??????? P(
???, ???? ???? ???-?? ??????.