![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
динамический массив динамических массивов. почему не получается ? [D7, 2000, XP]
ari_9 © (2007-05-30 21:26:00)банальная задача. в бд лежит набор многоугольников. загружаю их для обработки в структуру памяти
TGPoint = record
ID: Integer;
X, Y: Double;
end;
TGRegion = record
ID: Integer;
GPoints: array of TGPoint;
end;
....
GRegions: array of TGRegion;
такой процедурой
SetLength(GRegions, 0);
i := 0;
with l_Regions_IBQuery do
begin
ParamByName('X_REGION_GROUP').Value := Selected_Region_Group;
Prepare;
Open;
while not Eof do
begin
SetLength(GRegions, i + 1);
GRegions[i].ID := FieldByName('REGION_ID').AsInteger;
SetLength(GRegions[i].GPoints, 0);
k := 0;
with l_RVertexes_IBQuery do
begin
ParamByName('X_REGION_ID').Value := GRegions[i].ID;
Prepare;
Open;
while not Eof do
begin
SetLength(GRegions[i].GPoints, k + 1);
GRegions[i].GPoints[k].ID := FieldByName('RVERTEX_ID').AsInteger;
GRegions[i].GPoints[k].X := FieldByName('COORD_X').AsFloat;
GRegions[i].GPoints[k].Y := FieldByName('COORD_Y').AsFloat;
k := k + 1;
Next;
end;
Close;
UnPrepare;
end;
{*****}
i := i + 1;
Next;
end;
Close;
UnPrepare;
end;
получаю EAccessViolation на НЕ ПЕРВОМ, а третьем-четвертом задании длины массива GRegions[i].GPoints (выделил в коде), то есть когда i уже равно 1 и внешний цикл отрабатывает третий-четвертый раз. чувствую что ошибка на поверхности. нужен свежий взгляд
Zeqfreed (2007-05-30 21:42:00) [1]Трассировку в руки и погнали.
ari_9 (2007-05-30 21:27:00) [2]поправка, когда i уже равно 2 или 3