Вниз
Скачать: CL | DM;

Динам массивы   Найти похожие ветки 

← →
Falcon(TFSoft) ©   (2004-10-20 19:38) [0]

Здравствуйте ув. мастера!
Помогите решить вопрос, с памятью. Возникла ситуация, при которой со спрайтом необходимо хранить динамический массив, настройки спрайта, динамический т.к. я посчитал не выгодным храниьт разное кол. данных при фиксированной длинне, но не в этом суть. Так вот по его создании я вызываю функцию, которая инициализирует их, а именно:

Procedure TImageSpriteEX_2.Init (Name: String; var ImgList: TDXImageList);
var
 i     : byte;
 t     : TAS_EX;
begin
   i := 0;
   t := MainFile.FindTAS_EX(name);
   
   выделям память...
   SetLength (Massiv, t.count);
   while i<=t.count do
     begin
       записываем данные в структуру (только integer & boolen)
       Massiv[i] := t.data[i];
       inc(i);
     end;
end;


Всё грузится нормально и все данный передаються, но вот как только я завершаю приложение (просто закрываю его, без выполнения каких либо функций в Form.OnClose) вызывается оштбка InvalidPointer pointer operation ну и адресс и т.д.
Так вот методом научного тыка я определил, что если массив статичен, то такого не происходит.
Так в чём же проблема?
Ведь массив не объект и память из поднего высвобождается вроде автоматически?

Помогите пожайлуста...


← →
miek   (2004-10-20 22:05) [1]

while i<t.count

Иначе выходишь за границы массива.
Индексы должны лежать в границах [ 0, t.count-1]


← →
Falcon(TFsoft) ©   (2004-10-20 22:11) [2]

Наверное самая распрастранённая ошибка, спасибо!


← →
ASoft   (2004-10-21 02:50) [3]

По идее, о выходе за границы массива компилятор должен сообщить сразу во время выполнения проверки массива.  InvalidPointer pointer operation хитрая ошибка, которую трудно, порой, отследить, в отличии от нарушения ранга массива.


← →
NikeOLD ©   (2004-10-21 11:48) [4]


> ASoft   (21.10.04 02:50) [3]

Как он тебе сообщит в случае динамического массива?


> Falcon(TFsoft) ©

Неплохо бы и SetLength(<массив>, 0) делать.


← →
П7   (2004-10-21 14:37) [5]


> Falcon(TFSoft) ©   (20.10.04 19:38)  

Вот после программ с таким кодом остаётся только загаженная память!!! Кто тебя учил, что динамически выделенная память очищается автоматически? Сказки всё это!!! Не верь.

> NikeOLD ©   (21.10.04 11:48) [4]

Поддерживаю.


← →
Владислав ©   (2004-10-22 16:10) [6]

> П7   (21.10.04 14:37) [5]

Чушь.


← →
П7   (2004-10-22 16:26) [7]


> Владислав ©   (22.10.04 16:10) [6]

Очень информативная запись... Поподробнее, пожалуйста.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.022 c
1-1105702832
starik30
2005-01-14 14:40
2005.01.30
Установка свойств обьекта


1-1105891337
Qu
2005-01-16 19:02
2005.01.30
Определение цвета?


1-1105950102
andrey__
2005-01-17 11:21
2005.01.30
Преобразование ANSI строку в ASCII строку


3-1103794984
YuRock
2004-12-23 12:43
2005.01.30
Странная работа функций в Oracle


14-1105429646
Sergey13
2005-01-11 10:47
2005.01.30
Новое платежное поручение. Есть у кого?




   Наверх