Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

Ошибка времени выполнения   Найти похожие ветки 

 
andreil ©   (2007-09-16 17:12) [0]

В программе начала выскакивать ошибка. От чего вдруг? Буквально несколько часов назад этот код работал на отлично, а теперь начал выкаблучиваться.
For n:=0 to MAP_X do
   For n1:=0 to MAP_Y do
   begin
     Read(MapFile, Map.Objects[n, n1].Typed);
     //Map.Objects[n, n1].Damage:=Damage[Map.Objects[n, n1].Typed];    //RunTime ERROR 216
   end;


 
Сергей М. ©   (2007-09-16 17:24) [1]


> От чего вдруг?


Оттого что в программе появилась ошибка.


 
Юрий Зотов ©   (2007-09-16 17:24) [2]

216 - это ошибка работы с памятью (часто - при работе с длинными строками и динамическими массивами). Возможных причин - куча. Наиболее распространенные: использование длинных строк и динамических массивов в параметров функций DLL без ShareMem; выделение и освобождение памяти в разных модулях без ShareMem; неверная инициализация длинных строк и динамических массивов; выход за их длину, и т.д.

В Вашем коде подозрительно смотрятся:
- верхние границы циклов (их не надо на 1 уменьшить?);
- Map.Objects[n, n1] (если это массив, то проверьте выделение памяти под него).


 
andreil ©   (2007-09-16 17:52) [3]

Все переменные имеют тип данных BYTE; выхода за пределы массива нету, тк его размеры=0..15 и MAX"ы=15.

Повторюсь: работало нормально до кокого-то времени.


 
Сергей М. ©   (2007-09-16 18:09) [4]


> Все переменные имеют тип данных BYTE


Этот тип тебе послан небесами ?
Или это отсебячина ?)


 
vpbar ©   (2007-09-16 18:24) [5]

сделай индексы циклов типа integer и ошибка исчезнет. А то если они беззнаковые глюк может быть связанный с переполнением при вычитании 0-1


 
Kolan ©   (2007-09-16 18:42) [6]

Скорее всего изменился массив и индексы (n, n1) выходят за границы массива.

Для безопасности пишут:
for n := Low(Map.Objects) to High(Map.Objects) do
  for n1 := Low(Map.Objects[n]) to High(Map.Objects[n]) do
  begin
    Read(MapFile, Map.Objects[n, n1].Typed);
    //Map.Objects[n, n1].Damage:=Damage[Map.Objects[n, n1].Typed];    //RunTime ERROR 216
  end;


 
Anatoly Podgoretsky ©   (2007-09-16 18:46) [7]

> Kolan  (16.09.2007 18:42:06)  [6]

Думаю еще страшнее - отключена проверка диапазонов.
В результате ошибки не будет, но будет испорчена память.



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

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
8-1170689788
dzds
2007-02-05 18:36
2007.12.09
помогите найти базу типа CDDB


9-1164339612
grouzd)ev
2006-11-24 06:40
2007.12.09
А не проводить ли нам небольшие игры по кодингу? (ч. 5)


2-1194847372
Layner
2007-11-12 09:02
2007.12.09
Запуск приложения от другого пользователя и выход(logout) из XP


8-1170734577
avprohorov
2007-02-06 07:02
2007.12.09
как перерисовать только Image


2-1195214548
no3ep
2007-11-16 15:02
2007.12.09
printers