关于字符串内存分配的有关问题,求教
关于字符串内存分配的问题,求教
delphi7:SysUtils.pas
function StrAlloc(Size: Cardinal): PChar;
begin
Inc(Size, SizeOf(Cardinal));//为什么要加Inc?
GetMem(Result, Size);
Cardinal(Pointer(Result)^) := Size;//什么意思
Inc(Result, SizeOf(Cardinal));//为什么要加Inc?
end;
function StrBufSize(const Str: PChar): Cardinal;
var
P: PChar;
begin
P := Str;
Dec(P, SizeOf(Cardinal));//为什么要 Dec?
Result := Cardinal(Pointer(P)^) - SizeOf(Cardinal);
end;
------解决方案--------------------
实际上就是分配一块内存,多分配4字节,第一个位置记录长度,然后返回给用户使用的是后面的部分.
-----------------------------------------------
------解决方案--------------------
4个字节的长度
------解决方案--------------------
返回给用户使用的部分
------解决方案--------------------
-----------------------------------------------
delphi7:SysUtils.pas
function StrAlloc(Size: Cardinal): PChar;
begin
Inc(Size, SizeOf(Cardinal));//为什么要加Inc?
GetMem(Result, Size);
Cardinal(Pointer(Result)^) := Size;//什么意思
Inc(Result, SizeOf(Cardinal));//为什么要加Inc?
end;
function StrBufSize(const Str: PChar): Cardinal;
var
P: PChar;
begin
P := Str;
Dec(P, SizeOf(Cardinal));//为什么要 Dec?
Result := Cardinal(Pointer(P)^) - SizeOf(Cardinal);
end;
内存分配
sizeof
Delphi
------解决方案--------------------
实际上就是分配一块内存,多分配4字节,第一个位置记录长度,然后返回给用户使用的是后面的部分.
-----------------------------------------------
------解决方案--------------------
4个字节的长度
------解决方案--------------------
返回给用户使用的部分
------解决方案--------------------
-----------------------------------------------