実際には、次のとおりです。
unsigned char *buf=NULL;
buf=new unsigned char[SPS*2];
最初の割り当ては次の*buf=NULL
ように変換できますが、ポインターの内容は関数によってすぐに上書きされるためbuf := nil
、純粋なデッド コードです。buf
new
したがって、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;