Главная страница
    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.037 c
14-1105373145
Rule
2005-01-10 19:05
2005.01.30
Я упал под стул и долго смеялся !!!!!!!!!!!!!!!!!!!111


1-1105931121
Добавить
2005-01-17 06:05
2005.01.30
Как преобразовать коды нажимаемых клавиш в слова и обратно ?


14-1105553691
GanibalLector
2005-01-12 21:14
2005.01.30
Открытое письмо болельщиков ФК "Металлист"


1-1105943055
DelphiN!
2005-01-17 09:24
2005.01.30
Отключить контексное меню TWebBrowser-a


1-1106147180
Andrew_P
2005-01-19 18:06
2005.01.30
Точка в числе при выводе в текстовый файл





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский