Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизКак освободить память после SetLength Найти похожие ветки
← →
яяяя (2004-03-17 01:48) [0]сабж.
SetLength(arr, StringGrid1.RowCount-2);
SetLength(arr_1, StringGrid1.RowCount-2);
{...}
arr := nil;
arr_1 := nil;
Первый nil, прокатывает, на втором вываливаются дикие ошибки "Access violation ..."
Где грабли?
← →
Алхимик © (2004-03-17 02:05) [1]
var
arr, arr_1 : array of byte;
begin
SetLength(arr, 2);
SetLength(arr_1, 2);
ShowMessage(IntToStr(arr[1]));
arr := nil;
arr_1 := nil;
end;
Работает. Ошибка в другом месте.
← →
Defunct © (2004-03-17 02:39) [2]А в приведенном примере яяяя (17.03.04 01:48) память не освобождается. Перед тем как указателям Nil присваивать массивы нужно убить, тем же SetLength:
SetLength(arr, 0);
SetLength(arr_1, 0);
← →
KSergey © (2004-03-17 05:58) [3]> Defunct © (17.03.04 02:39) [2]
Обман трудового населения. Присвоить нил - есть освободить память.
← →
Anatoly Podgoretsky © (2004-03-17 09:14) [4]Defunct © (17.03.04 02:39) [2]
Установка нулевой длины устнавливает переменную в NIL
Установка в nil устнавливает длину в 0
Повторная установка в в nil или длину в 0, ничего не меняет.
← →
tria © (2004-03-17 10:35) [5]>яяяя
ИМХО:
Скорее всего, определения массивов у тебя идут один за другим. При работе с первым массивом ты где-то обращаешься за пределы размерности массива. При отключенном в настройках компиляции контроле происходит затирание адреса, хранящегося в arr_1 (на место ссылки пишутся твои данные). В дальнейшем при попытке обращения по неправильному адресу в arr_1 система вылетает. Ищи ошибку в коде до строчки arr_1=nill
Для начала посавь опцию Range checking.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.04 c