关于指针操作的问题(最后的一点积蓄)!(55分)

  • 主题发起人 主题发起人 gcys
  • 开始时间 开始时间
G

gcys

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大师:
请问windows和dos下的指针操作一样吗?在win98中,当应用程序退出时,其内申请的
指针变量会自动撤消吗?
为什么我用dispose(p:Tpointer)不起作用?我的机器有64M内存,可程序执行几次后
就会报告‘内存不足’,甚至死机。
请各位大师援助!
 
Win98系统对内存的管理很不好,因此程序必须仔细地维护分配的内存,在结束时
正确地释放才行.
内存的分配和释放应对应,如
用GetMem分配的,应该用FreeMem释放,FreeMem与TP不同之处是无需指定长度.
用New分配的,应该用Dispose释放,
如果是对象,必须正确编写析构函数保证对象内部分配的对象及内存正确释放.
当然,也不排除Delphi本身的问题,在使用Delphi的中有关GDI的部分时,我个人
认为Delphi不能完全正确地释放所有GDI对象,但绝不至于运行几次就死机,应该
还是从你自己的程序入手.
 
使用Delphi报告内存不足的原因有三:
(1)GDI资源占用太多,窗口太多所致.一些不常用的窗体应该在应用时创建,不用时释
放.
(2)利用了数组,一种十分奇怪的现象,很少的数组即可吞掉大量内存???
(3)大量的Query 查询或Table 都开着.我在192M的机器上,没执行一次少2%.
 
一般情况下,不会出现此类现象,Win95还有虚拟内存呢,我在写程序时出现内存不足
主要一下原因:
1, 对过大的文本进行操作, 使用了string类型.由于string的特殊,改变一次重新
拷贝.
2. 使用了递归. 我觉得这是最主要的.在递归中不停的申请内存,但没释放.
3. 占用大量的gui资源.
另外你的程序是关于什么方面的?

一般情况下,程序结束时,Win95会给你打扫战场,清理这个程序所用的内存.但是
经常无法彻底打扫干净.最好自己建的对象,内存,自己释放.
 
用NT怎么样
 
Dispose中的变量类型必须正确,如果不正确就可能释放失败。如:
Type
TR1 = Record
name: string;
no: integer;
end;

TPR1 = ^TR1;

var
pr = TPointer;
r: TR1;
begin
pr = @r;
end;

释放时应使用:
dispose(@r);
或dispose(TPR1(pr));
而使用dispose(pr)可能会失败。
 
谢谢!接受答案
 
后退
顶部