一个空的Delphi工程测试内存泄漏10处。感觉Delphi的内存管理很差的。
在程序编写的过程中大家有没有好的方法避免内存的泄漏?
1>class Create后一定要free
2>New一个指针后要dispose
另外还有什么要注意的?比如当调用一个函数的时候还需要释放指针吗?
欢迎大家讨论!Up有分
在程序编写的过程中大家有没有好的方法避免内存的泄漏?
1>class Create后一定要free
2>New一个指针后要dispose
另外还有什么要注意的?比如当调用一个函数的时候还需要释放指针吗?
欢迎大家讨论!Up有分
我的程序就很少有,甚至没有。
只有new,dispose
create,free等,还有,见下面
BoundsChecker Delphi Edition是针对开发出高质量的32位 Delphi 应用程序的最为全面的错误检测工具。
BoundsChecker 能自动指出静态,堆栈内存错误和资源泄漏问题。与一般的内存检测工具不同,
BoundsChecker 能够校验最新的 Windows APIs,包括 ActiveX, DirectX, OLE/COM, ODBC等等。
通过使用 BoundsChecker,你甚至可以在离开 Delphi开发环境的情况下也能发现和修复绝大多数的错误。另:MemProof也可以:
检查内存堆和资源泄漏的调试程序.适用于Delphi,C++ Builder,Borland C++ 5.X
BoundsChecker没有mem好,mem定位很准,能刚好定位到泄露的地方。BoundsChecker就不知道定位
到哪里角落头去了。
Application.CreateForm(TFormMain, FormMain)漏洞等等
???
在变量不再使用时,没有被释放,在程序运行期间内,占用了内存。注意以下几点:一、通常,程序结束,你所有占用的内存,无论你释放释放了,都会被释放。
除非是OLE之类的。即:所有在你程序空间内占用的内存都会被释放。二、内存未被释放的情况通常出现在:YourObject.Create,但没有Free.
或者说,你分配了指针的内容,用完后没有被释放。三、如果出现内存泄露,会造成系统内存不断被你的程序占用。严重的
情况通常发生在:随着运行时间的加长,你的代码不断的创建,而不释放无用
的内存,这样,会导致你的机器最终不堪负荷。这种情况会在一直不停运行的
SERVER类程序里,尤其严重。
MemProof的具体内容是:
VirtualAlloc reserves or commits a region of pages in the virtual address space of the calling process.
The allocated pages must be freed with VirtualFree when no longer needed.
kernel32.dll CreateProcessW
欢迎大家继续讨论,谢谢