Вниз
Скачать: 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
4-1102658807
Andrey V.
2004-12-10 09:06
2005.01.30
Запуск из ДОСовской программы


6-1100692778
BFG9k
2004-11-17 14:59
2005.01.30
Ошибка определения размера файла в idFTP


6-1100412396
focor
2004-11-14 09:06
2005.01.30
HTML_API


14-1105687741
Ihor Osov'yak
2005-01-14 10:29
2005.01.30
Нужен совет о комплектации системы (сpu, monitor)


1-1105862615
syte_ser78
2005-01-16 11:03
2005.01.30
Как запретить повторный запуск программы?




   Наверх