Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Игры";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.038 c
1-1106214149
Poha
2005-01-20 12:42
2005.01.30
Печать


4-1102951073
The Scorpion
2004-12-13 18:17
2005.01.30
Уведомление DLL_PROCESS_DETACH


1-1106191143
Прогресс
2005-01-20 06:19
2005.01.30
Как сделать приложение на полный экран? Чтоб поверх панели задач?


1-1106129788
vint45
2005-01-19 13:16
2005.01.30
Проблема с дебагом


1-1105943405
Zhekson
2005-01-17 09:30
2005.01.30
Вот так грабли 8-)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский