MFC对话框内存泄露的问题

传落古 2019-03-06 06:11:32
MFC对话框程序在退出时,发生了内存泄露:
Detected memory leaks!
Dumping objects->
{156} normal block at 0x00DCE540,2904bytes long.
Data: < f > 88 CA 66 0F 00 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.
根据下面引用中提供的方法:
引用
https://blog.csdn.net/u011430225/article/details/47840647

我把_CrtSetBreakAlloc(156);放在了对话框应用程序的构造函数中,

CHFDDLL_TestApp::CHFDDLL_TestApp()
{
_CrtSetBreakAlloc(156);
// 支持重新启动管理器
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}

Debug运行后,并没有产生中断;
之后看到下面引用中的这种方法:
引用
https://blog.csdn.net/yh880/article/details/6566297

根据该方法,把MFC的使用:由“在共享DLL中使用MFC,改为”在静态库中使用MFC“,Debug运行,程序产生了中断(前面加的_CrtSetBreakAlloc(156);起作用了),于是不断地跳出,直到看到下面这个:

CStringData* CAfxStringMgr::Allocate( int nChars, int nCharSize ) throw()
{
size_t nTotalSize;
CStringData* pData;
size_t nDataBytes;

ASSERT(nCharSize > 0);

if(nChars < 0)
{
ASSERT(FALSE);
return NULL;
}

nDataBytes = (nChars+1)*nCharSize;
nTotalSize = sizeof( CStringData )+nDataBytes;
pData = (CStringData*)malloc( nTotalSize );
if (pData == NULL)
return NULL;
pData->pStringMgr = this;
pData->nRefs = 1;
pData->nAllocLength = nChars;
pData->nDataLength = 0;

return pData;
}

这几行代码所在的文件是strcore.cpp;分析里面的代码,pData指针动态分配的内存在后面并没有释放掉,而pData = (CStringData*)malloc( nTotalSize );这一行刚好是156行,即前面报内存泄露时{156}中的数,所以是不是应该就是这个strcore.cpp中的这个CStringData* CAfxStringMgr::Allocate( int nChars, int nCharSize ) throw()函数中出现了内存泄露,而这个文件是系统提供的,怎么处理?

...全文
107 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
////////////////////////////////////////////////////////////////////// // 使用说明: // 1. 安装VS2008 // 2. 安装OpenCV2.0 // 3. 安装cmake2.8.6 // 4. 通过cmake生成可以被VC++ 2008调用的OpenCV动态库 // 5. 配置Windows环境变量Path,将OpenCV2.0安装后的bin文件夹目录添加入用户变量 // 使得Path=.../bin // (...是OpenCV2.0安装后的program files下的目录全路径) // 6. 打开VC++ 2008,菜单中的工具→选项→项目和解决方案→VC++目录 // 在显示以下内容的目录中, // 先选中可执行文件,加入目录...\bin // 再选中包含文件,加入目录...\include\opencv // 再选中库文件,加入目录...\lib // (...是OpenCV2.0安装后的program files下的目录全路径) // 7. 新建MFC对话框项目VideoPlayer // 然后再在它的属性里去掉更换Unicode的字符集为多字节集 // 配置链接器的输入依赖项cxcore200.lib cv200.lib highgui200.lib // 8. 或者是不进行7的操作,直接将本程序对新建的VideoPlayer对话框项目进行覆盖 // 然后再对其中的VideoPlayer对话框项目配置属性进行修改 ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// // 功能说明: // 1. slider控件、Picture控件、打开按钮、播放按钮、暂停按钮、停止按钮 // 2. 实现视频的加载、播放、暂停、停止,以及通过滑动条进行视频播放进度的控制 ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// // 存在的问题: // 1. 有些视频并不是有多少帧就多少帧结尾 // 比如用屏幕录像机录像的avi,比如录了帧,它有时会丢帧, // 丢帧的那个位置,无法用IplImage的图像空间来加载视图,那程序调试就会报错 // 2. 基本的功能都实现了,就缺验证它的执行效率,还有是否会存在内存泄漏 ////////////////////////////////////////////////////////////////////// 解压密码和相关信息参看http://www.cnblogs.com/huangweilin/archive/2012/05/18/2507764.html

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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