首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否应该手动释放PChar数组的已分配元素?

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

Stack Overflow用户
提问于 2013-01-05 16:51:58
回答 1查看 1.2K关注 0票数 3

考虑以下代码:

代码语言:javascript
复制
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超出作用域时编译器会自动释放数组元素?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-05 17:08:50

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

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

代码语言:javascript
复制
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;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14170201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档