![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не пойму почему ошибка при SetLetngth [D7, XP]
kostyl_kostyl © (2009-09-15 17:55:00)Не пойму почему ошибка при SetLetngth
Есть объект, у которого дискретно увеличиваются массивы свойств
procedure TMyObject.Add(NewValue: Integer);
var
L: Integer;
begin
L := length(Values);
if (L < Count + 1) then
begin
SetLength(Values, L + 10);
SetLength(OtherValues, L + 10);
SetLength(OtherOtherValues, L + 10);
end;
Values[Count] := NewValue;
Inc(Count);
end;
То есть три свойства это массивы и я выделяю постепенно память для них. Все одни синхронизированы, то есть всегда имеют одинаковую длину?
И вот SetLength(OtherValues, L + 10); происходит ошибка access violation read of adress...
Пробовал компилировать с {$R+}, все равно не пойму как понять почему такое бывает.
Rouse_ (2009-09-15 23:59:00) [21]
> KilkennyCat © (15.09.09 23:43) [5]
>
> последние две строчки тоже неплохо выглядят.
Нормально выглядят, там же проверка выше :)
Тут Сергей прав - где-то засираются указатели...
Achpile (2009-09-15 23:46:00) [22]делаешь так:
type
TValue = record
Value,
OtherValue,
OtherOtherValue: integer;
end;
var
Values: array of TValue;
procedure Add(NewValue: TValue);
begin
SetLength(Values, Length(Values) + 1);
Values[High(Values)] := NewValue;
end;
И все... Чтобы обратиться к любому элементу класса делаешь так:
Values[i].Value
или
Values[1].OtherValue
Ну вообщем как-то так... i - это индекс элемента, к которому хочешь обратиться...
KilkennyCat (2009-09-15 23:43:00) [23]последние две строчки тоже неплохо выглядят.
Rouse_ (2009-09-15 23:22:00) [24]
> Есть объект, у которого дискретно увеличиваются массивы
> свойств
Зачем "дискретно" увеличивать три массива, представляющие данные по одному значению, вместо того чтобы представить эти три значения одной записью и плясать уже от массива оных?
Сергей М. (2009-09-15 21:43:00) [25]
> SetLength(OtherValues, L + 10); происходит ошибка access
> violation
Костыль тут простой - кто-то или что-о загадило содержимое структуры, скрываемой за идентификатором OtherValues
Сергей М. (2009-09-15 21:37:00) [26]
> все равно не пойму как понять почему
Песня !
palva (2009-09-15 19:07:00) [27]Что такое массив свойств? Как в объекте описана Values?