永发信息网

Delphi New Dispose FreeMem 如何回收管理内存

答案:2  悬赏:20  手机版
解决时间 2021-04-03 07:33
Delphi New Dispose FreeMem 如何回收管理内存
最佳答案
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 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;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
魔域心湖怎么去?
什么是QA测试
江苏紫狼游戏的工作环境和工作待遇怎么样?
单选题江南丘陵与山东半岛丘陵地区相比A.水分
给他很真诚的道歉了,他2三天没理我了……这
厦门岛内哪里房价最低?
羞愧和羞涩意思一样吗
水电瓶160安最低多少钱?
在UG NX中,这个怎么画
狗狗TV是免费的吗?有看过的盆友吗?
0.65kw.h/24h 一小时多少电
鹏华资产是不是上海那家公司?
湖北恩施野山河旅游景点天气
从辛家庙坐地铁到哪站离郭杜最近?
如果有个人对你再好,但是他患有被害妄想症,
推荐资讯
湖南邵阳离湖南湘西大概有多远的距离?
问道杀反叛地勇星给什么
刚结婚的新人多少日子能见新人
女孩手上系红绳,红绳上还有铃铛,这有什么含
索额图帮康熙斩杀鳌拜、平定三藩、剿灭葛尔丹
鸡公站在心上面的成语是
阴宅卯山酉向兼甲庚2度
纯英文环境对英文学习的作用
You are so hungry. Why _______ have someth
滑板怎么滑才不停
后的可吸收线是拆了好还是不拆好
石头里透明石是什么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?