Форум: "Основная";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
ВнизОшибка времени выполнения Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.045 c