C程序开发,免不了要用到指针,当然也免不了遇到内存泄露,内存越界的问题。
谁有检测内存越界的好方法,说出来听听。哪位兄弟有boundschecker 8.2的license,在csdn上下载了两个都不能用,一个运行起来报错,说license不对,一个运行了之后vs2005 直接崩溃。
请有的兄弟发我油箱[email protected],一经 验证 能用,马上送200分

解决方案 »

  1.   

    我还是说尽量少使用指针,使用的时候要记得指针的长度,字符串得使用n版本的函数.
    malloc的时候得确定在那里free.不能确定的话就不要写malloc.
    对指针赋值的时候应该注意被赋值指针需要不需要释放.
    动态分配内存的指针最好不要再次赋值.基本上严格遵守这4点的话,越界内存泄露会很少很少.
      

  2.   

    内存泄漏产生的原因一般是三种情况:       1.分配完内存之后忘了回收.
          2. 程序Code有问题,造成没有办法回收.
          3.某些API函数操作不正确,造成内存泄漏.
          1.    内存忘记回收,这个是不应该的事情.但是也是在代码种很常见的问题.分配内存之后,用完之后,就一定要回收. 如果不回收,那就造成了内存的泄漏,造成内存泄漏的Code如果被经常调用的话,那内存泄漏的数目就会越来越多的.从而影响整个系统的运行. 比如下面的代码
      for (int =0;I<100;I++)
      {
          Temp =  new BYTE[100];
      }
      就会产生 100*100Byte的内存泄漏.
          2.    在某些时候,因为代码上写的有问题,会导致某些内存想回收都收不回来,比如下面的代码
      Temp1 = new BYTE[100];
      Temp2 = new BYTE[100];
      Temp2 = Temp1;
      这样,Temp2的内存地址就丢掉了,而且永远都找不回了,这个时候Temp2的内存空间想回收都没有办法.
     
          3.    API函数应用不当,在Windows提供API函数里面有一些特殊的API,比如FormatMessage.  如果你给它参数中有 FORMAT_MESSAGE_ALLOCATE_BUFFER,它会在函数内部New一块内存Buffer出来.但是这个buffer需要你调用 LocalFree来释放. 如果你忘了,那就会产生内存泄漏.     自己写代码的时候多注意才是解决的根本方法,靠以后去检查,维护,会累死人的~~~~
      

  3.   

    一般这种错误有两种:
    1. 申请的内存没有释放,用“搜索”功能,搜一下"new/delete malloc/free"配对不,注意“ delete与[]delete不一样。
        函数内申请内存后,返回前没有释放!这个要注意!!!!2. 就是申请的内存不足,常常是少了一个或两个字节!
      

  4.   

    这个版本可以用,有license,不过版本比较低,lz可以试试看http://119.147.41.16/down1?cid=E70E52E504937B8145ACA330E3B0CBAE42229190&t=2&fmt=&usrinput=boundschecker&dt=2002000
      

  5.   

    http://topic.csdn.net/u/20090220/12/9b07f419-f1a5-4bd4-8f67-60b8d2609d23.html?seed=1217100858
    看60楼的回答
      

  6.   

    谢谢楼上,不过听说7.2没法集成在vs2005,而且也不知道vista下面能不能运行,就不下载了。
    揭帖的时候,会送上100分作为感谢。有8.2 license 的兄弟给一个,300分感谢。
      

  7.   

    http://www.3ddown.com/soft/31594.htm
    看看能用不
      

  8.   

    http://download.pcpop.com/Soft/54997.html
      

  9.   

    貌似是这样的语句:(这是一个扫雷游戏)
    Detected memory leaks!
    Dumping objects ->
    d:\vc++应用程序\扫雷\landmine\landmine\mainfrm.cpp(68) : {122} normal block at 0x0038DE08, 400 bytes long.
     Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
    d:\vc++应用程序\扫雷\landmine\landmine\mainfrm.cpp(68) : {120} normal block at 0x0038DBD8, 400 bytes long.
     Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
    Object dump complete.
      

  10.   

    http://download.csdn.net/source/374354
    这个不行?
      

  11.   

    这个不行,在vs ide下运行会造成ide崩溃,单独运行没有反应。内存泄露问题不大,一般都能发现,关键是内存越界
      

  12.   

    现在好的代码扫描工具等一般都是商业的,需要花钱买liscense,比如klocwork,可以静态扫描代码,各种内存泄漏,内存越界都能扫描
    当然也会有一些误报...
      

  13.   

    其他越界不知道,但是对于数组操作等一类出现的越界,现在vs2005以后都是security API提示了
    即: strcpy_s, snprintf_s... vs2005编译的时候都会提示你不要使用deprecate API,使用新的_s API
      

  14.   

    看见*就头痛...
    再加个malloc就更头痛...