Is there a known edge case issue connected to setting the length of dynamic arrays?
I have a program that simulates a billiards game, and during the rerack balls method of TPoolTable the number of pool balls on the table varies based on the rerack option used. Currently, I am having a problem where an exception is thrown if I try to SetLenth(Balls, 10) or greater than 10. Values less than 10 work fine, but at 10 balls and above an exception is thrown right at the SetLength call.
External: SIGSEGV
000000000041DCA4 eb12 jmp 0x41dcb8 <SYSTEM_$$_SYSGETMEM_VAR$QWORD$$POINTER+264>
000000000041DCA6 4c89f0 mov %r14,%rax 000000000041DCA9 488b5008 mov 0x8(%rax),%rdx 000000000041DCAD 488b4018 mov 0x18(%rax),%rax 000000000041DCB1 488982a8000000 mov %rax,0xa8(%rdx) ^ instruction pointer is at this line ^
I tried compiler both FPC 3.3.1 from trunk source and 3.2.2 from the official Sourceforge binary. The same error occurs when building with both compilers. My platform is x86_64 Linux.
For reference here is the type of Balls:
TVec2 = record
X, Y: Single;
end;
TPoolBall = record
Pos: TVec2;
Dir: TVec2;
Speed: Double;
Color: LongWord;
Touched: Boolean;
Sinking: Single;
SinkPocket: Integer;
SinkPos: TVec2;
Pocketed: Boolean;
Index: Integer;
end;
TPoolBalls = array of TPoolBall;... later inside TPoolTable ...
Balls: TPoolBalls;