Во-первых, вы выделяете Buffer
для SizeOf(MyRec)
байтов (176 для версии статического массива), но затем вы читаете только 1 байт из UDP-сокета.Вместо этого вам нужно заменить 1 на SizeOf(MyRec)
или Length(Buffer)
, чтобы соответствовать распределению.
При этом array of array of ...
не сохраняется в одном непрерывном блоке памяти.На самом деле это массив указателей на другие массивы, которые разбросаны по всей памяти.Итак, чтобы сделать то, что вы просите, вам нужно сделать что-то вроде этого:
type
TMyRec = record
MyArray: array of array of double;
end;
const
BytesPerArr = SizeOf(Double) * 11;
var
MyClient: TIdUDPClient;
MyRec: TMyRec;
Buffer: TIdBytes;
...
SetLength(MyRec.MyArray, 2, 11);
SetLength(Buffer, 2 * BytesPerArr);
if MyClient.ReceiveBuffer(Buffer, Length(Buffer)) > 0 then
begin
Move(Buffer[0], MyRec.MyArray[0][0], BytesPerArr);
Move(Buffer[BytesPerArr], MyRec.MyArray[1][0], BytesPerArr);
end;