Detected memory leaks!
Dumping objects ->
{15083} normal block at 0x0316CC78, 752 bytes long.
Data: < y R > 0F 00 00 00 79 01 00 00 12 00 00 00 52 01 00 00
{2425} normal block at 0x01E41138, 68 bytes long.
Data: <, dP` @ < > 2C 20 64 50 60 10 E3 01 40 03 00 00 3C 03 00 00
{2424} normal block at 0x01EEB098, 8 bytes long.
Data: < > 90 1C E3 01 D0 0F E4 01
{2423} normal block at 0x01E410E0, 28 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
找了很久,没有看出哪里有问题。
下了一个 DevPartner Visual C++ Boundschecker 11.0000
安装之后,在vs2010的菜单里面没有看到它·········
也没有找到很多关于他的资料。
上面的debug输出信息中,已经有
内存分配序号 内存块的类型 内存位置 的内存块的大小
等信息了。如何利用这些信息查找内存泄露的位置呢?
malloc的都free了。。。。啊。。。到底是哪里有问题呢。。
+++++++++++++++++++
ps:
程序中为了得到窗口位置声明的这些变量:
CDC *pDC;
pDC =pwnd->GetDC();
这样的指针,需要··释放么?
19 个解决方案
#1
ReleaseDC
#2
有地方忘记的
或者 你把malloc的注释掉
排除法
或者 你把malloc的注释掉
排除法
#3
ReleaseDC(pDC);
#4
使用 DEBUG_NEW macro 这样new而没有delete的地方 在调试输出中会有明显的提示
#5
{2425} normal block at 0x01E41138, 68 bytes long.
看见前面这个2425没有?
你多试几次。如果几次都有2425这样的块号,你就用_crtBreakAlloc函数设置这个块号。
然后再分配这个块号的地址时就会中断下来。你就知道是哪个东西分配的地址了。
看见前面这个2425没有?
你多试几次。如果几次都有2425这样的块号,你就用_crtBreakAlloc函数设置这个块号。
然后再分配这个块号的地址时就会中断下来。你就知道是哪个东西分配的地址了。
#6
双击对应的行也不能定位吗?
#7
哦。对哈。都忘了。
在MFC中获得pic空间,经常这样,但是总忘记释放。
顺便问下,搞不清楚这几个:
CRect rect;
CDC *pDC;
HDC hDC;
CWnd *pwnd;
pwnd = GetDlgItem(IDC_PIC);
pDC =pwnd->GetDC();
hDC= pDC->GetSafeHdc();
pwnd->GetClientRect(&rect);
这样,ReleaseDC(pdc);
之后呢?
那个 CWnd的怎么释放撒?
#8
其实我用了opencv里面的函数。。。。。。感觉。。。。排除的好痛苦啊。。。。。
#9
pwnd = GetDlgItem(IDC_PIC);
这个 不需要你释放
这个 不需要你释放
#10
嗯
不过,还是有问题 除此之外,全局变量中就有一个vector 了
这样声明的:
vector< CvPoint> PointVector;
然后,在程序退出的时候,这样释放空间的:
vector< CvPoint>().swap(PointVector);
对不对 呢。。。。
刚开始跑程序的时候内存使用情况:
不过我跑了10min程序后,内存使用情况如下:
额 我刚想说,前后变化不大呢。。。结果程序就崩了。。。。
#11
然后,在程序退出的时候,这样释放空间的:
vector< CvPoint>().swap(PointVector);
-------------------------------------------
释放空间做什么?
里面存储的又不是指针!
vector< CvPoint>().swap(PointVector);
-------------------------------------------
释放空间做什么?
里面存储的又不是指针!
#12
不是vector 不会释放空间的么。。。。。
不是他会提前申请一大块空间,但是他不会自己释放的么。。。我还特意搜的释放方法。。。额
#13
为什么 我只是 运行, 在木有跑程序前,关掉 了这个 对话框 ,还会出现 内存泄露呢
vs2010 新建了一个 dlg ,
什么都没做,提示:
Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp(4500) : {270} client block at 0x002DCF90, subtype c0, 56 bytes long.
a CObject object at $002DCF90, 56 bytes long
c:\users\administrator.qqqpolimqc7hmgn.000\desktop\智驱\test\test\test.cpp(59) : {257} client block at 0x002DC758, subtype c0, 12 bytes long.
a CObject object at $002DC758, 12 bytes long
{256} client block at 0x002DC8F0, subtype c0, 204 bytes long.
a CObject object at $002DC8F0, 204 bytes long
哎 很头疼啊。。。 下的 BoundsCheck 安装后,在 10 中也没显示出来。。郁闷哦
#14
http://blog.csdn.net/chenyujing1234/article/details/8075667
你看看这个
你看看这个
#15
按f4或者双击应该有反应的
#16
正解!
#17
遇到同样问题,使用5楼的方法解决了。
#18
我也遇到这个问题。。。新建了个工程,加了检查内存的代码,直接就告诉我有内存泄露。看到任务管理器也确实在增加,这应该算是MFC的BUG吧。。什么都没动都有泄露。
#19
可能是opencv 库文件的问题吧,链接上就有内存泄漏了,楼主后来是怎么解决的?
#20
#1
ReleaseDC
#2
有地方忘记的
或者 你把malloc的注释掉
排除法
或者 你把malloc的注释掉
排除法
#3
ReleaseDC(pDC);
#4
使用 DEBUG_NEW macro 这样new而没有delete的地方 在调试输出中会有明显的提示
#5
{2425} normal block at 0x01E41138, 68 bytes long.
看见前面这个2425没有?
你多试几次。如果几次都有2425这样的块号,你就用_crtBreakAlloc函数设置这个块号。
然后再分配这个块号的地址时就会中断下来。你就知道是哪个东西分配的地址了。
看见前面这个2425没有?
你多试几次。如果几次都有2425这样的块号,你就用_crtBreakAlloc函数设置这个块号。
然后再分配这个块号的地址时就会中断下来。你就知道是哪个东西分配的地址了。
#6
双击对应的行也不能定位吗?
#7
哦。对哈。都忘了。
在MFC中获得pic空间,经常这样,但是总忘记释放。
顺便问下,搞不清楚这几个:
CRect rect;
CDC *pDC;
HDC hDC;
CWnd *pwnd;
pwnd = GetDlgItem(IDC_PIC);
pDC =pwnd->GetDC();
hDC= pDC->GetSafeHdc();
pwnd->GetClientRect(&rect);
这样,ReleaseDC(pdc);
之后呢?
那个 CWnd的怎么释放撒?
#8
其实我用了opencv里面的函数。。。。。。感觉。。。。排除的好痛苦啊。。。。。
#9
pwnd = GetDlgItem(IDC_PIC);
这个 不需要你释放
这个 不需要你释放
#10
嗯
不过,还是有问题 除此之外,全局变量中就有一个vector 了
这样声明的:
vector< CvPoint> PointVector;
然后,在程序退出的时候,这样释放空间的:
vector< CvPoint>().swap(PointVector);
对不对 呢。。。。
刚开始跑程序的时候内存使用情况:
不过我跑了10min程序后,内存使用情况如下:
额 我刚想说,前后变化不大呢。。。结果程序就崩了。。。。
#11
然后,在程序退出的时候,这样释放空间的:
vector< CvPoint>().swap(PointVector);
-------------------------------------------
释放空间做什么?
里面存储的又不是指针!
vector< CvPoint>().swap(PointVector);
-------------------------------------------
释放空间做什么?
里面存储的又不是指针!
#12
不是vector 不会释放空间的么。。。。。
不是他会提前申请一大块空间,但是他不会自己释放的么。。。我还特意搜的释放方法。。。额
#13
为什么 我只是 运行, 在木有跑程序前,关掉 了这个 对话框 ,还会出现 内存泄露呢
vs2010 新建了一个 dlg ,
什么都没做,提示:
Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp(4500) : {270} client block at 0x002DCF90, subtype c0, 56 bytes long.
a CObject object at $002DCF90, 56 bytes long
c:\users\administrator.qqqpolimqc7hmgn.000\desktop\智驱\test\test\test.cpp(59) : {257} client block at 0x002DC758, subtype c0, 12 bytes long.
a CObject object at $002DC758, 12 bytes long
{256} client block at 0x002DC8F0, subtype c0, 204 bytes long.
a CObject object at $002DC8F0, 204 bytes long
哎 很头疼啊。。。 下的 BoundsCheck 安装后,在 10 中也没显示出来。。郁闷哦
#14
http://blog.csdn.net/chenyujing1234/article/details/8075667
你看看这个
你看看这个
#15
按f4或者双击应该有反应的
#16
正解!
#17
遇到同样问题,使用5楼的方法解决了。
#18
我也遇到这个问题。。。新建了个工程,加了检查内存的代码,直接就告诉我有内存泄露。看到任务管理器也确实在增加,这应该算是MFC的BUG吧。。什么都没动都有泄露。
#19
可能是opencv 库文件的问题吧,链接上就有内存泄漏了,楼主后来是怎么解决的?