Record constructor and memory corruption
Original Reporter info from Mantis: hnb
-
Reporter name: Maciej Izak
Original Reporter info from Mantis: hnb
- Reporter name: Maciej Izak
Description:
When is used record constructor twice for procedure/method then is achieved memory corruption... The corruption is different on different platforms. Tested for Win32 and Android (ARM6 with HF)
For example on Windows the output for "Foo(TR1.Create(1, 2, 3), TR2.Create(4,5,6));" is:
A = 1
B = 2
C = 3
D = 1
E = 2
F = 3
for Android:
A = 4
B = 5
C = 6
D = 4
E = 5
F = 6
Expected output:
A = 1
B = 2
C = 3
D = 4
E = 5
F = 6
=== example code ===
{$MODE DELPHI}
type
TR1 = record
A, B, C: Int64;
constructor Create(_A, _B, _C: Int64);
end;
TR2 = record
D, E, F: Int64;
constructor Create(_D, _E, _F: Int64);
end;
constructor TR1.Create(_A, _B, _C: Int64);
begin
A := _A;
B := _B;
C := _C;
end;
constructor TR2.Create(_D, _E, _F: Int64);
begin
D := _D;
E := _E;
F := _F;
end;
procedure Foo(const _1: TR1; _2: TR2);
begin
WriteLn('A = ', _1.A);
WriteLn('B = ', _1.B);
WriteLn('C = ', _1.C);
WriteLn('D = ', _2.D);
WriteLn('E = ', _2.E);
WriteLn('F = ', _2.F);
end;
begin
Foo(TR1.Create(1, 2, 3), TR2.Create(4,5,6));
end.