gpt4 book ai didi

Delphi:是否应该手动释放 PChar 数组的已分配元素?

转载 作者:行者123 更新时间:2023-12-03 15:50:30 24 4
gpt4 key购买 nike

考虑以下代码:

procedure Test;
var
MyPCharArray: array of PChar;

begin
SetLength(MyPCharArray, 3);

GetMem(MyPCharArray[0], 5);
GetMem(MyPCharArray[1], 5);
GetMem(MyPCharArray[2], 5);

StrCopy(MyPCharArray[0], 'test');
StrCopy(MyPCharArray[1], 'abcd');
StrCopy(MyPCharArray[2], '1234');

// Are these necessary?
FreeMem(MyPCharArray[0], 5);
FreeMem(MyPCharArray[1], 5);
FreeMem(MyPCharArray[2], 5);
end;

是否应该手动释放分配的元素,或者当 MyPCharArray 超出范围时编译器将自动释放数组元素?

最佳答案

事实上,您对 GetMem 的每次调用都必须与对 FreeMem 的调用相匹配。

我不确定你为什么有这个数组。这不是我希望在纯 Pascal 代码中看到的类型。所以我的猜测是您正在将 PChar 数组传递给某个外部库。在这种情况下,我将声明一个字符串数组以及 PChar 数组。然后通过在字符串数组的相应元素上使用 PChar(...) 来创建每个 PChar 元素。那么你就可以避免 StrCopy、GetMem 和 FreeMem。

procedure CallLib(const str: array of string);
var
i: Integer;
parr: array of PChar;
begin
SetLength(parr, Length(str));
for i := 0 to high(parr) do
parr[i] := PChar(str[i]);
// call library now
end;

关于Delphi:是否应该手动释放 PChar 数组的已分配元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14170201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com