请大家帮忙看看一个关于内存泄露的问题,看了很久,没找到原因。

CHID 2010-11-15 02:47:08
那个地方出了问题?代码如下:

#include "iostream"
#include "afxwin.h"
using namespace std;

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

int main()
{
int Rows=10;
int Cols=5;
int i=0,j=0;
CString **ArrayData;
CString Value;

//创建指针数组
ArrayData=new CString*[Rows];
for (i=0;i<Rows;i++)
{
//为每一行分配内存空间
ArrayData[i]=new CString[Cols];
}

//设置数组的值
for (i=0;i<Rows;i++)
{
for (j=0;j<Cols;j++)
{
Value.Format("i:%d,j:%d",i,j);
ArrayData[i][j]=Value;
}
}

//显示数组的值
for (i=0;i<Rows;i++)
{
for (j=0;j<Cols;j++)
{
Value.Format("%s",ArrayData[i][j]);
cout<<(LPCTSTR)Value<<"\t\t";
}
cout<<endl;
}


//释放内存
for (i=0;i<Rows;i++)
{
delete[] ArrayData[i];
ArrayData[i]=NULL;
}

delete[] ArrayData;
ArrayData=NULL;

_CrtDumpMemoryLeaks();

return 0;
}

...全文
279 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zongzihe 2010-11-17
  • 打赏
  • 举报
回复
主函数我没找到啥内存泄露的地方,等待高手解答。
magic335096305 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 chid 的回复:]

ArrayData是个指针数组,每个元素都指向一个地址,你delete这个数组,即delete了数组中的指针,但是指针指向的内存空间没有被释放。个人是这么理解的,_CrtDumpMemoryLeaks()没用过。
wj982397072 2010-11-15
  • 打赏
  • 举报
回复
我用的调试工具是VC++6.0,出现这样的错误:
Linking...
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in libcpd.lib(delop.obj)
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/aaa.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
这四个错误主要是因为代码中要调用到MFC的dll,所以只有在链接的时候出错
按照如下步骤就避免错误了:
Project] --> [Settings] 把其中的Foundation Class改成Use MFC in shared DLL
然后在调试程序就ok通过了。
hongkun18 2010-11-15
  • 打赏
  • 举报
回复
用vld吧,很容易就定位到内存泄露的地方.
以前我也用过_CRTDBG_MAP_ALLOC觉得有点莫名其妙,不直接表现问题.
libinfei8848 2010-11-15
  • 打赏
  • 举报
回复
从目前发的代码中看不到问题
可以使用vld,boundchecker等软件比对,这些软件可以定位到具体的函数
superarhow 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 doox8086 的回复:]
没用过_CrtDumpMemoryLeaks();
有人说要这样

C/C++ code
int main()
{
{
//...
} _CrtDumpMemoryLeaks();

return 0;
}


[当前] 当它执行时,所有未销毁的对象均会报内存泄漏
所以要在测式的地方加 { }
[/Quote]

- - 呃,慢了一步
CHID 2010-11-15
  • 打赏
  • 举报
回复
这段时间在学习C++,这段代码原来是一个MFC程序的一部分,程序在结束时报错,后来查出是这段代码有内存泄露问题,现在还没弄清楚是怎么回事。请大家帮忙看看,多谢了。
superarhow 2010-11-15
  • 打赏
  • 举报
回复
int main(){
{
CString Value;
...
}
_CrtDumpMemoryLeaks();
return 0;
}
这样改就不会打印第一个泄漏了.
另外那个CDynLinkLibrary 是共享MFC库的东东,它也是全局释放的.你可以尝试把MFC库静态链接,就不会有问题了.

dooX8086 2010-11-15
  • 打赏
  • 举报
回复
没用过_CrtDumpMemoryLeaks();
有人说要这样
int main()
{
{
//...
} _CrtDumpMemoryLeaks();

return 0;
}


[当前] 当它执行时,所有未销毁的对象均会报内存泄漏
所以要在测式的地方加 { }
superarhow 2010-11-15
  • 打赏
  • 举报
回复
至少你的main函数本身没有泄漏. 你的_CrtDumpMemoryLeaks(); 运行的时候栈上的变量Value还没有析构所以会有它的提示.另外有些全局的东东是不能在main里面析构的.
dubiousway 2010-11-15
  • 打赏
  • 举报
回复
试验了一下,似乎这样,

即使你把主程序中所有内容都去掉,头文件不变的情况下

int main(){
_CrtDumpMemoryLeaks();// 这里依然 返回true.
return 0;
}

不明白。。。呵呵。难道头文件中就有内存泄漏问题?从来没用过这函数,也没细细研究过。你加油。
弄明白了别忘了写出来供大家参考啊!


车太靓 2010-11-15
  • 打赏
  • 举报
回复
弄不明白!!
guyuxiangtheone 2010-11-15
  • 打赏
  • 举报
回复
干 看错 眼花了 悲剧
guyuxiangtheone 2010-11-15
  • 打赏
  • 举报
回复
你 NEW 了3个地方 DELETE 了2个地方 当然要泄漏啦 new出现几次 delete也要出现几次
你释放了ArrayData[i],ArrayData
可是没释放ArrayData[i]=new CString[Cols];
CHID 2010-11-15
  • 打赏
  • 举报
回复
Debug时出现以下提示:
Detected memory leaks!

Dumping objects ->
strcore.cpp(118) : {114} normal block at 0x00421EC0, 20 bytes long.
Data: < i:9,> 01 00 00 00 07 00 00 00 07 00 00 00 69 3A 39 2C
{51} client block at 0x00421F00, subtype 0, 64 bytes long.
a CDynLinkLibrary object at $00421F00, 64 bytes long
{46} normal block at 0x00421E10, 33 bytes long.
Data: < C > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD
{45} normal block at 0x00421E60, 40 bytes long.
Data: < |L > 14 7C 4C 10 16 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.
Detected memory leaks!
Dumping objects ->
{46} normal block at 0x00421E10, 33 bytes long.
Data: < C > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD
{45} normal block at 0x00421E60, 40 bytes long.
Data: < |L > 14 7C 4C 10 16 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.
The thread 0x460 has exited with code 0 (0x0).

65,187

社区成员

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

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