Фактически, в:
unsigned char *buf=NULL;
buf=new unsigned char[SPS*2];
Первое присваивание *buf=NULL
может быть переведено как buf := nil
, но это чистый мертвый код, поскольку buf
содержимое указателя немедленно перезаписывается new
function.
Таким образом, ваш код C может быть переведен так:
var buf: PAnsiChar;
i: integer;
begin
Getmem(buf,SPS*2);
for i := 0 to SPS*2-1 do
buf[i] := #2;
...
Freemem(buf);
end;
Более Delphi-идиоматическая версия может быть:
var buf: array of AnsiChar;
i: integer;
begin
SetLength(buf,SPS*2);
for i := 0 to high(buf) do
buf[i] := #2;
...
// no need to free buf[] memory (it is done by the compiler)
end;
или напрямую:
var buf: array of AnsiChar;
i: integer;
begin
SetLength(buf,SPS*2);
fillchar(buf[0],SPS*2,2);
...
// no need to free buf[] memory (it is done by the compiler)
end;