Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Непонятки с динамич.массивами

523
15 апреля 2003 года
serjufa
14 / / 20.05.2000
СУть приводимого ниже куска проги: имеется текст.файл. Каждая строка которого загоняется в свой динам.массив (Dhi_FlexibleArray, Lck_FlexibleArray .... : array of Real). Заранее неизвестно кол-во записей в строке. Беру заведомо больший пост. массив (q: array[0..40] of real), определяю кол-во записей в каждой строке, задаю размер динам. массива и загоняю в него значения.

case NomerStroki of
998:
begin
SetLength(Dhi_FlexibleArray, i+1);
for i2 := 0 to i+1 do Dhi_FlexibleArray[i2] := q[i2]; // ПРИМЕЧ.
Size_Dhi_FlexibleArray := i+1;
end;

ЗДЕСЬ ОШИБКА ВЫЛЕЗАЕТ [access violantion at 0x00406315: write to adres 0x00030e70]

999:
begin
{procedure Line999;}
SetLength(Lck_FlexibleArray, i+1);
Size_Lck_FlexibleArray := i+1;
for i1 := 0 to i+1 do Lck_FlexibleArray[i1] := q[i1];
end;
Если убрать строку //ПРИМЕЧ., то все работает без заполнения первого динам.массива.

Может кто подскажет чего? Заранее благодарен, [email]leyftd@smtp.ru[/email]
3.5K
16 апреля 2003 года
WarRior
5 / / 16.04.2003
SetLength(Dhi_FlexibleArray, i+1);
for i2 := 0 to i+1 do
Dhi_FlexibleArray[i2] := q[i2]; // ПРИМЕЧ.

При вызове SetLength второй параметр - количество элементов массива, а динамические массивы индексируются с нуля. Соответственно
Dhi_FlexibleArray[i2] когда i2=i+1 - уже за пределом выделеннной памяти под массив. Отсюда и Access Violation. Последний элемент имеет индекс, равный i, а не i+1.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог