Delphi New Dispose FreeMem 如何回收管理内存
答案:2 悬赏:20 手机版
解决时间 2021-04-03 07:33
- 提问者网友:送舟行
- 2021-04-02 19:49
Delphi New Dispose FreeMem 如何回收管理内存
最佳答案
- 五星知识达人网友:等灯
- 2019-09-28 21:46
procedure GetMem(var P: Pointer; Size: Integer); {分配一个指定大小的内存块(连续),并用P指向它}
procedure ReallocMem(var P: Pointer; Size: Integer); {重新分配指定大小内存块,参数P必须是nil或者指向一个由GetMem, AllocMem, 或 ReallocMem分配的内存变量,其分配的内存是连续的,会把前面已有的数据移到新分配的内存中去}
通常采用New分配内存比较好。
一、New和GetMem都可以为指针类型动态分配内存,并且Delphi不会对由此分配的内存进行管理,即必须有相应的代码对其进行释放,否则内存将“丢失”,直到应用程序结束。
二、New分配的内存必须由Dispose来释放;GetMem分配的内存必须由FreeMem来释放;
三、New根据指针类型来自动计算需要分配的内存尺寸;GetMem必须指定尺寸;
因此,对于类型指针,一般用New和Dispose来进行管理;对于内存尺寸随机的指针(典型地如PChar),一般用GetMem和FreeMem来进行管理。从另一方面来说,在很多时候用哪一对例程都可以进行动态内存管理。
A不是指针,你用new(A)无效的
procedure ReallocMem(var P: Pointer; Size: Integer); {重新分配指定大小内存块,参数P必须是nil或者指向一个由GetMem, AllocMem, 或 ReallocMem分配的内存变量,其分配的内存是连续的,会把前面已有的数据移到新分配的内存中去}
通常采用New分配内存比较好。
一、New和GetMem都可以为指针类型动态分配内存,并且Delphi不会对由此分配的内存进行管理,即必须有相应的代码对其进行释放,否则内存将“丢失”,直到应用程序结束。
二、New分配的内存必须由Dispose来释放;GetMem分配的内存必须由FreeMem来释放;
三、New根据指针类型来自动计算需要分配的内存尺寸;GetMem必须指定尺寸;
因此,对于类型指针,一般用New和Dispose来进行管理;对于内存尺寸随机的指针(典型地如PChar),一般用GetMem和FreeMem来进行管理。从另一方面来说,在很多时候用哪一对例程都可以进行动态内存管理。
A不是指针,你用new(A)无效的
全部回答
- 1楼网友:狂恋
- 2020-06-04 08:22
procedure tform2.formcreate((sender: tobject);
var
pp: pansichar;
begin
pp := '123456789';
new(a); // 申请内存空间
getmem(a^.pac, 100); // 开辟100个内存空间
copymemory(a^.pac, pp, 9); // 复制内存
freemem(a^.pac); // 释放内存
a := nil; //这样才真正的让a指向了空地址nil
if assigned(a) then //空值测试 把这行注释掉一定报错
showmessage(string(a^.pac));end;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯