Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамический массив.


kj ©   (2004-08-26 17:16:00) 

Как отчистить память от динамического массива?


Суслик   (2004-08-26 17:45:00) [1]

как всегда молодеж не любит range check error
и почему он по умолчанию не стоит в опциях проекта?


Anatoly Podgoretsky   (2004-08-26 17:41:00) [2]

kj   (26.08.04 17:29) [10]
Пальчиками посчитай сколько эдементов выделено и скольким ты пытаешься присвоить значения.


Amoeba   (2004-08-26 17:35:00) [3]


> kj   (26.08.04 17:29) [10]
> Код:
>
> M: array of array of Integer;
>  SetLength(M, 1, 2);
>  M[0, 0]:= 0;
>  M[0, 1]:= 0;
>  M[0, 2]:= 1;
>  M:= nil; -сдесь появляется ошибка

Правильно, будет ошибка! Как нужно делать есть в любом руководстве по Delphi или в Help на топик Multidimensional dynamic arrays.


Семен Сорокин   (2004-08-26 17:34:00) [4]

галочку range check error в Options проекта поставь


kj   (2004-08-26 17:33:00) [5]

Ошибся. Спасибо всем.


kj   (2004-08-26 17:32:00) [6]

Массив глобальный.


Семен Сорокин   (2004-08-26 17:32:00) [7]

SetLength(M, 1, 2); вместо 2 надо 3
M[0, 0]:= 0;
M[0, 1]:= 0;
M[0, 2]:= 1;


Amoeba   (2004-08-26 17:31:00) [8]

Все уже сказал Семен сорокин в посте [1]

или
SetLength(massiv, 0);
или
massiv := nil;

Оба варианта эквивалентны.

P.S. Если динамический массив является локальной переменной процедуры/функции, то специально ничего освобождать не нужно - память будет автоматически освобождена при выходе из процедуры.


kj   (2004-08-26 17:29:00) [9]

Код:

M: array of array of Integer;
 SetLength(M, 1, 2);
 M[0, 0]:= 0;
 M[0, 1]:= 0;
 M[0, 2]:= 1;
 M:= nil; -сдесь появляется ошибка


MegaVolt   (2004-08-26 17:29:00) [10]

Упс.... Стормозил. Видать сегодня не мой день :)


Amoeba   (2004-08-26 17:27:00) [11]


> MegaVolt   (26.08.04 17:24) [6]
> RTFM :)
> procedure Dispose(var P: Pointer); Releases memory allocated
> for a dynamic variable.

Не путай динамический массив с динамической переменной. Не надо пачкать молодежи мозги, если сам не знаешь.
LMD


Суслик   (2004-08-26 17:26:00) [12]

Эх молодо-зелено.
(я о 3)

Автору.
Динамический массив в записи, а запись ты копируешь командой move...
или что-то такое...
В общем препятствуешь дельфи осуществлять корректный подсчет ссылок.


Amoeba   (2004-08-26 17:26:00) [13]


> antonn ©   (26.08.04 17:23) [3]
> Запихай в try...except

В данном случае так делать "не есть хорошо". Такие исключения надо не отлавливать, а просто их не допускать. Пусть товарищь приведет свой код.


MegaVolt   (2004-08-26 17:24:00) [14]

RTFM :)
procedure Dispose(var P: Pointer); Releases memory allocated for a dynamic variable.


jack128   (2004-08-26 17:24:00) [15]

antonn ©   (26.08.04 17:23) [3]
спаси боже от таких програмистов..


Amoeba   (2004-08-26 17:23:00) [16]


> На это появляется ошибка "Invalid pointer operation".

Значит ошибка в 17-й строке. Код в студию!


antonn   (2004-08-26 17:23:00) [17]

Запихай в try...except


kj   (2004-08-26 17:22:00) [18]

На это появляется ошибка "Invalid pointer operation".


Семен Сорокин   (2004-08-26 17:18:00) [19]

SetLength(massiv, 0);
massiv := nil;
?


Наверх

Титульная страница Поиск, карта сайта Написать письмо