写了一个递归查找文件程序,查找到的文件伴随一些处理函数,但我观察程序运行的时候发现这个程序在查找的时候会使程序占用的内存增多,(4MB左右到5MB左右)。
第二次查找几乎是从增多后的Size再增多(5MB左右到6MB左右)。感觉无法释放一部分内存似的。我的查找函数利用线程实现,查找结束或者停止查找就结束线程(没使用TerminateThread,是令其自己退出)。但是不是线程的资源就应该被释放了?
有人说我是内存泄漏问题,请问内存泄漏是如何造成的?据说是因为New的没有被Delete,但是所有的New都Delete了。请问这是为什么?谢谢。代码太多了,贴不出来。

解决方案 »

  1.   

    你的VC下进行调试,看看在程序结束的时候,你的VC调试窗口中有没有关于内存泄漏的显示信息。
      

  2.   

    呵呵呵. 有本书讲调试的很不错. 叫"WNDOWS调试技术".
      

  3.   

    忘记说了,Debug的时候我用BoundsChecker也只是查出了两个资源泄漏,但是Release版用BoundsChecker查却查出了N个内存Leaks
      

  4.   

    看样子是内存泄漏,
    把代码贴出来看看,是不是New 和delete在调用过程中不配对同一个指针申请的内存没有释放,就又申请新的内存
      

  5.   

    代码太多了贴不出来,但是new 和delete我都用了,一个一个查找的
      

  6.   

    可以使用purify来查找,
    如果是debug版可以定位到函数.
      

  7.   

    Rational 公司出的调试工具.
      

  8.   

    现在看来,"内存泄漏"快要变成另一个"goto"了,大家仿佛是"谈虎色变".其实goto也是可以用的,内存也是可以让它漏一小块的. 如果一个程序不是长时间运行,其内存也只是一闪而过的,大可不必去管它,有人说这不是良好的风格,的确不是,但不要忘了祖宗的话"中庸",一律不管是不对,然而对每一个地方都查也是不对的.要"中庸",比如void main()
    {
       char* ptr=new char[1000];
    }
    这个程序,明显有内存问题,可是它是大可不必解决的.它没有明显的副作用.话扯远了,我认为楼主的问题可能不是new以后未能delete造成的,可能是一些handle未能free选成的.在查文件中最常用的FindFirstFile(),它返回一个handle,最后要调FindClose()去free那个handle. 楼主不妨查一查.按经验估计,楼主的这部分"泄漏"大概不是个"要命"的问题.