CrtDbg无法检测到的内存泄露

Daven172 2012-03-26 12:36:34
在VC2010中编译如下代码:

#include <crtdbg.h>
int main()
{
// 设置标志后, 编译器会自动在任何退出的地方调用_CrtDumpMemoryLeaks();输出内存泄漏报告
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
int *p = new int[10];
delete p;//去掉这一句可以检测到
return 0;
}


以上的代码无法检测到内存泄露,其实我不确定到底是有内存泄露,没有检测到,还是根本没有发生内存泄露

或者说对于基本数据类型,delete和delete []的作用是一样的?
...全文
125 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rendao0563 2012-03-26
  • 打赏
  • 举报
回复
区别 只是是否全部调用析构函数.

想避免这种东西. 只需要自己写一个池即可.

自己malloc 自己构造 自己析构.
pengzhixi 2012-03-26
  • 打赏
  • 举报
回复
标准也规定这样的行为是undefined behavior的。所以按规矩来。
Jim_King_2000 2012-03-26
  • 打赏
  • 举报
回复
这个属于分配和释放api不匹配,undefined behavior,并不一定会泄漏。
lys86_1205 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhao4zhong1 的回复:]
对于基本数据类型,delete和delete []的作用是一样的.
[/Quote]
你可以测试一下,内存已经释放
#include <crtdbg.h>
#include<stdio.h>
int main()
{
// 设置标志后, 编译器会自动在任何退出的地方调用_CrtDumpMemoryLeaks();输出内存泄漏报告
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
int *p = new int[10];
for(int i=0;i<10;i++)
{
p[i]=i;
}
delete p;//去掉这一句可以检测到
printf("p[0]=%d\n",p[0]);
for(int i=1;i<10;i++)
{
printf("p[%d]=%d\n",i,p[i]);
}
return 0;

}
赵4老师 2012-03-26
  • 打赏
  • 举报
回复
对于基本数据类型,delete和delete []的作用是一样的.

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧