VS2010 _MFC程序_内存泄露问题

timidsmile 2013-03-27 12:57:26
debug的时候窗口中出现如下提示:

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();

这样的指针,需要··释放么?


...全文
524 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
paresly 2015-01-28
  • 打赏
  • 举报
回复
可能是opencv 库文件的问题吧,链接上就有内存泄漏了,楼主后来是怎么解决的?
grf123 2013-09-26
  • 打赏
  • 举报
回复
我也遇到这个问题。。。新建了个工程,加了检查内存的代码,直接就告诉我有内存泄露。看到任务管理器也确实在增加,这应该算是MFC的BUG吧。。什么都没动都有泄露。
珠琪 2013-05-03
  • 打赏
  • 举报
回复
遇到同样问题,使用5楼的方法解决了。
LiuYinChina 2013-03-28
  • 打赏
  • 举报
回复
正解!
引用 5 楼 ydfivy 的回复:
{2425} normal block at 0x01E41138, 68 bytes long. 看见前面这个2425没有? 你多试几次。如果几次都有2425这样的块号,你就用_crtBreakAlloc函数设置这个块号。 然后再分配这个块号的地址时就会中断下来。你就知道是哪个东西分配的地址了。
jimette 2013-03-28
  • 打赏
  • 举报
回复
按f4或者双击应该有反应的
jimette 2013-03-28
  • 打赏
  • 举报
回复
http://blog.csdn.net/chenyujing1234/article/details/8075667 你看看这个
这不是鸭头 2013-03-27
  • 打赏
  • 举报
回复
ReleaseDC
timidsmile 2013-03-27
  • 打赏
  • 举报
回复
引用 4 楼 zgl7903 的回复:
使用 DEBUG_NEW macro 这样new而没有delete的地方 在调试输出中会有明显的提示
为什么 我只是 运行, 在木有跑程序前,关掉 了这个 对话框 ,还会出现 内存泄露呢 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 中也没显示出来。。郁闷哦
timidsmile 2013-03-27
  • 打赏
  • 举报
回复
引用 11 楼 sha_jinhao 的回复:
然后,在程序退出的时候,这样释放空间的: vector< CvPoint>().swap(PointVector); ------------------------------------------- 释放空间做什么? 里面存储的又不是指针!
不是vector 不会释放空间的么。。。。。 不是他会提前申请一大块空间,但是他不会自己释放的么。。。我还特意搜的释放方法。。。额
jimette 2013-03-27
  • 打赏
  • 举报
回复
然后,在程序退出的时候,这样释放空间的: vector< CvPoint>().swap(PointVector); ------------------------------------------- 释放空间做什么? 里面存储的又不是指针!
timidsmile 2013-03-27
  • 打赏
  • 举报
回复
引用 9 楼 sha_jinhao 的回复:
pwnd = GetDlgItem(IDC_PIC);

这个 不需要你释放





不过,还是有问题 除此之外,全局变量中就有一个vector 了

这样声明的:
vector< CvPoint> PointVector;
然后,在程序退出的时候,这样释放空间的:
vector< CvPoint>().swap(PointVector);

对不对 呢。。。。




刚开始跑程序的时候内存使用情况:


不过我跑了10min程序后,内存使用情况如下:




额 我刚想说,前后变化不大呢。。。结果程序就崩了。。。。
jimette 2013-03-27
  • 打赏
  • 举报
回复
pwnd = GetDlgItem(IDC_PIC); 这个 不需要你释放
timidsmile 2013-03-27
  • 打赏
  • 举报
回复
引用 2 楼 sha_jinhao 的回复:
有地方忘记的 或者 你把malloc的注释掉 排除法
其实我用了opencv里面的函数。。。。。。感觉。。。。排除的好痛苦啊。。。。。
timidsmile 2013-03-27
  • 打赏
  • 举报
回复
引用 1 楼 arpnet99 的回复:
ReleaseDC
哦。对哈。都忘了。 在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的怎么释放撒?
Eleven 2013-03-27
  • 打赏
  • 举报
回复
双击对应的行也不能定位吗?
一个傻冒 2013-03-27
  • 打赏
  • 举报
回复
{2425} normal block at 0x01E41138, 68 bytes long. 看见前面这个2425没有? 你多试几次。如果几次都有2425这样的块号,你就用_crtBreakAlloc函数设置这个块号。 然后再分配这个块号的地址时就会中断下来。你就知道是哪个东西分配的地址了。
zgl7903 2013-03-27
  • 打赏
  • 举报
回复
使用 DEBUG_NEW macro 这样new而没有delete的地方 在调试输出中会有明显的提示
liuli7786 2013-03-27
  • 打赏
  • 举报
回复
ReleaseDC(pDC);
jimette 2013-03-27
  • 打赏
  • 举报
回复
有地方忘记的 或者 你把malloc的注释掉 排除法

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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