Текущий архив: 2005.06.06;
Скачать: CL | DM;
Вниз
TStringGrid+TSparseArray Найти похожие ветки
← →
Tuborg © (2005-05-20 15:42) [0]Есть некая прога, которая всю дорогу кидает что-то в StringGrid, где-то через 12 часов работы её начинает плющить ошибкой EAccessViolation, поскольку кто-то внутри механизмов TStringGrida начинает читать адреса с младшими адресами (0x00000XXX). При разборе оказалось, что существует некий механизм динамического перераспределения хранимых данных внутри StringGrid"а, основанного на классе TSparsePointersArray. Оно перестаёт правильно выделять указатели в области свободной памяти. Где можно найти информацию по этим механизмам или по классу TSparsePointersArray. DelphiHelp и все информационные ресурсы, которые я просмотрел не имеют вообще даже краткого описания этих вещей. Может кто сталкивался? ... помогите пожалуйста...
← →
Digitman © (2005-05-20 15:45) [1]
> Оно перестаёт правильно
цитируй фрагмент кода, где, по твоему мнению, "оно начинает неправильно" ..
← →
Tuborg © (2005-05-20 18:12) [2]
function TSparsePointerArray.GetAt(Index: Integer): Pointer;
var
byteP: PChar;
secIndex: Cardinal;
begin
{ Index into Section Directory using high order part of
index. Get pointer to Section. If not null, index into
Section using low order part of index. }
if Index = cachedIndex then
Result := cachedPointer
else begin
secIndex := Index shr secShift;
if secIndex >= slotsInDir then
byteP := nil
else begin
byteP := secDir^[secIndex];
if byteP <> nil then begin
Inc(byteP, (Index and indexMask) * SizeOf(Pointer));
end
end;
if byteP = nil then Result := nil else Result := PPointer(byteP)^;
cachedIndex := Index;
cachedPointer := Result
end
end;
Сам по собе этот метод использую не я, а какие-то внутренние механизмы в TStringGrid"e.
Строчка вызывающая EAccessViolation - выделена жирным шрифтом.
Страницы: 1 вся ветка
Текущий архив: 2005.06.06;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.047 c