内存泄漏一旦发生,将是每个C++程序员的一个可怕的恶梦。
特别是随着程序规模的扩大,线程的增加,外部环境关联的复杂度增加,
内存泄漏问题将成为一段时间内程序员挥之不去的可怕恶梦。前段时间刚和电信方调试完一个内存泄漏的程序,
半个多月的时间,
忙于在各个线程查找定位,分析;
最后终于搞定了。最深的体会:调试内存泄漏是C++程序员最头疼的恶梦。不知道大家在这方面有什么体会和高招?

解决方案 »

  1.   

    保持好习惯,new 和delete配对出现,每写一个new,都找个地方给它delete了。
    时刻保持警惕,一旦出现,马上解决,不要等到最后的时刻统一解决。
    对于需要被多次调用的函数,更是要保持警惕,如果里面发生了内存泄漏,会吃光内存的。 相反,如果一个变量在启动的时候初始化,关闭的时候删除,那么不删除也无所谓的,因为进程会自动的删除的。另外,在Dll中申请的,vc的检测会提示这些是内存泄漏,其实不是的,只不过它们是在vc报告之后才删除的。
      

  2.   

    我还没写过一个NEW,会出现这问题吗?
      

  3.   

    我还没写过一个NEW,会出现这问题吗?
      

  4.   

    内存泄漏只是一部分.
    C/C++程序使用内存,以及其他系统资源(如:句柄)都是自己申请的.有的API明确说明,申请的句柄一定要释放.可有些人就是懒.
    调用系统的内存分配函数分配内存后不释放,同样会产生内存泄漏,而且编译器不会给出提示的.
    句柄没释放,编译器也不会有提示,但同样产生资源泄漏.会消耗完系统资源,导致系统运行异常.系统资源泄漏比内存泄漏更难检查.
    个人经验:
    1.使用API时一定注意看API的备注段.很多关键的东西都在这里了.基本上,有一半以上的人不看备注段,看他们提的问题就知道他们没看.
    2.有借有还.记得:出来混,是要还的.
      

  5.   

    这确实是很头痛的问题啊,最主要还是写的时候要注意。
    我现在是能不用new就坚决不用。
      

  6.   

    用工具检测,我一般用Boundcheck,很方便
      

  7.   

    new,delete匹配使用,预见各种可能性
      

  8.   

    其实不光是new,delete匹配使用,还有好多情况,比如句柄啥的,这要靠经验了