Хотите получить Access Violation на абсолютно ровном месте, без намека на ухабы? Велком, как говорится:
program array_of_generic_record;
{$APPTYPE CONSOLE}
Uses
TypInfo;
Type
TRec<T>
FField : T;
End;
Var
a : Array Of TRec<TObject>
i : Integer;
r : TRec<TObject>
begin
WriteLn(SizeOf(TRec<TObject>
WriteLn(GetTypeData(TypeInfo(TRec<TObject>
SetLength(A, 1000000); // but system.DynArraySetLength.elSize = 1; line 28288
// (DelphiXE2 update 4 hotfix 1); look at attached screenshot: bug.png
// absolutely normal code lead to access violation error
For i := Low(a) To High(a) Do
a[i] := r;
end.
В общем, из описания понятно, что в системном модуле неверно получается размер элемента динамического массива. Из-за чего, понятное дело, памяти выделяется меньше и попытки работать с таким массивом приводят к краху. На дворе 2012 год. Блин, когда они уже нормальный компилятор осилят написать. Лучи ненависти вам, абракадабры :E
p.s. QC #106917
Комментариев нет:
Отправить комментарий