C程序开发,免不了要用到指针,当然也免不了遇到内存泄露,内存越界的问题。
谁有检测内存越界的好方法,说出来听听。哪位兄弟有boundschecker 8.2的license,在csdn上下载了两个都不能用,一个运行起来报错,说license不对,一个运行了之后vs2005 直接崩溃。
请有的兄弟发我油箱[email protected],一经 验证 能用,马上送200分
谁有检测内存越界的好方法,说出来听听。哪位兄弟有boundschecker 8.2的license,在csdn上下载了两个都不能用,一个运行起来报错,说license不对,一个运行了之后vs2005 直接崩溃。
请有的兄弟发我油箱[email protected],一经 验证 能用,马上送200分
解决方案 »
- 放在Tab里面的带checkbox风格的Tree初始化不能被Check?
- 怎么让对话框永远不能取得焦点?
- socket 多线程问题
- 如何在局域网内实现串口通信(服务器可以和其中任意一台单独发送消息)
- 求助:为什么我在CFormView里放两个picturebox,另一个重新setWindowsPos后会消失?
- 《深入浅出MFC》学习中的问题:Typedef void (CCmdTarget::*AFX_PMSG)(void);//应该如何理解?
- 取ADO字段名问题点!!!
- ★★★ 有关线程的问题,内付代码,请进! ★★★
- 为什么我的菜单在win98下不能显示(高分求教)
- 提问 Windows media Services组播配置
- 怎样保存画在对话框上的波形图
- 有关CString的疑问
malloc的时候得确定在那里free.不能确定的话就不要写malloc.
对指针赋值的时候应该注意被赋值指针需要不需要释放.
动态分配内存的指针最好不要再次赋值.基本上严格遵守这4点的话,越界内存泄露会很少很少.
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来释放. 如果你忘了,那就会产生内存泄漏. 自己写代码的时候多注意才是解决的根本方法,靠以后去检查,维护,会累死人的~~~~
1. 申请的内存没有释放,用“搜索”功能,搜一下"new/delete malloc/free"配对不,注意“ delete与[]delete不一样。
函数内申请内存后,返回前没有释放!这个要注意!!!!2. 就是申请的内存不足,常常是少了一个或两个字节!
看60楼的回答
揭帖的时候,会送上100分作为感谢。有8.2 license 的兄弟给一个,300分感谢。
看看能用不
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.
这个不行?
当然也会有一些误报...
即: strcpy_s, snprintf_s... vs2005编译的时候都会提示你不要使用deprecate API,使用新的_s API
再加个malloc就更头痛...