热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux教程>编程开发>C++>

New 和 GetMem 的不同之处

来源: 作者: 时间:2007-11-20 Tag: 点击:

New 和 GetMem 的不同之处

如果操作一个 record 指针中的字符串变量,会不会丢失 string 的内
存空间,造成内存泄漏?

结果是:使用 New() 分配的内存,会自动初始化 record 的内容,并且在 Dispose 时自动
清除所有已分配的内存,包括 string 或其他动态数组的内存。GetMem/FreeMem 没有这个
性质。事实上,New() 中调用了 GetMem,并且执行了一些初始化的操作。

代码如下:

type
PMyRecord = ^TMyRecord;
TMyRecord = record
    I: Integer;
    S: string;
    V: Variant;
end;

{;$DEFINE NEW}

procedure TForm1.Button1Click(Sender: TObject);
var
R: PMyRecord;
I: Integer;
begin
for I := 1 to 1024 do
begin
{$IFDEF NEW}
    New(R); // 正确将 R.S 初始化
    SetLength(R.S, $FFFF);
    Dispose(R); // 正确释放 R.S 内存空间
{$ELSE}
    GetMem(R, SizeOf(TMyRecord));
    R.S := ''; // 出错
    SetLength(R.S, $FFFF);
    FreeMem(R);
{$ENDIF}
end;
end;

最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
栏目列表