一个空的Delphi工程测试内存泄漏10处。感觉Delphi的内存管理很差的。
在程序编写的过程中大家有没有好的方法避免内存的泄漏?
1>class Create后一定要free
2>New一个指针后要dispose
另外还有什么要注意的?比如当调用一个函数的时候还需要释放指针吗?
欢迎大家讨论!Up有分

解决方案 »

  1.   

    函数是不用释放指针的,至于内存泄露多,其实不都和delphi。
    我的程序就很少有,甚至没有。
    只有new,dispose
    create,free等,还有,见下面
      

  2.   

    “BoundsChecker”——不是"Boundcheck"
    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就不知道定位
    到哪里角落头去了。
      

  3.   

    我就是用的MemProof,检测出几千个错误,MemProof定位的内存漏洞也让我琢磨不透,比如在调用一个函数时告诉我说“通过getmem获得的指针必须通过...释放”。还有虚拟地址空间没有释放。  Application.Initialize漏洞
    Application.CreateForm(TFormMain, FormMain)漏洞等等
    ???
      

  4.   

    内存泄露就是(非科学定义):在你的程序中,为变量赋予的内存地址
    在变量不再使用时,没有被释放,在程序运行期间内,占用了内存。注意以下几点:一、通常,程序结束,你所有占用的内存,无论你释放释放了,都会被释放。
    除非是OLE之类的。即:所有在你程序空间内占用的内存都会被释放。二、内存未被释放的情况通常出现在:YourObject.Create,但没有Free.
    或者说,你分配了指针的内容,用完后没有被释放。三、如果出现内存泄露,会造成系统内存不断被你的程序占用。严重的
    情况通常发生在:随着运行时间的加长,你的代码不断的创建,而不释放无用
    的内存,这样,会导致你的机器最终不堪负荷。这种情况会在一直不停运行的
    SERVER类程序里,尤其严重。
      

  5.   

    一个空的工程应该是没有内存漏洞的,出现这种情况,可能是你的内存漏洞检测程序没有针对Delphi的编译器进行优化导致的!!!如果你使用一些专门针对delphi的内存检测程序就不会出现这样的问题!!!至少我这里是这样的!!!值得注意的是Delphi的编译器各个版本之间也是不兼容的,所以for Delphi的内存检测程序是不通用的!!!
      

  6.   

    to Delphi_Li(Delphi Li) 我使用了两种内存泄漏工具测试都报有内存泄漏。
    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
      

  7.   

    我使用的是TurboPower的 Sleuth QA!!!就没有出现空工程也有内存漏洞的问题!!!
      

  8.   

    我试一下Delphi_Li(Delphi Li) 的工具
    欢迎大家继续讨论,谢谢