1、////BC说以下这些打了注释号的地方发生了内存泄露?!嘎嘎,单步跟踪也不知道是我程序什么地方调用了这些个东西,谁能告诉我怎么办哪?if (!(__sbh_pHeaderList = HeapAlloc(_crtheap, 0, 16 * sizeof(HEADER)))) ////泄露!if ( (*env = (_TSCHAR *)_malloc_crt(cchars * sizeof(_TSCHAR)))== NULL ) ////泄露!p = _malloc_crt(numargs * sizeof(_TSCHAR *) + numchars * sizeof(_TSCHAR)); ////泄露!if ( (_tenviron = env = (_TSCHAR **)
_malloc_crt((numstrings+1) * sizeof(_TSCHAR *))) == NULL ) ////泄露!if ( (p = (_PVFV *) _realloc_crt(__onexitbegin,
_msize_crt(__onexitbegin) +
ONEXITTBLINCR * sizeof(_PVFV))) == NULL ) ////泄露!
2、以下地方出现资源泄露??嘎嘎if ((hFont = CreateFont(GetSystemMetrics(SM_CYMENUCHECK), 0, 0, 0,FW_NORMAL, 0, 0, 0, SYMBOL_CHARSET, 0, 0, 0, 0, _T("Marlett"))) != NULL) ////资源泄露!InitializeCriticalSection( &(pio->lock) ); ////资源泄露!if ((hMenu = ::LoadMenu(hInst, lpszMenuName)) == NULL) ////资源泄露!hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,pParentWnd->GetSafeHwnd(), AfxDlgProc); ////资源泄露!怎么定位到自己的程序中呢??用BC的CALL STACK出现访问某个DLL时权限不够的功能限制。
_malloc_crt((numstrings+1) * sizeof(_TSCHAR *))) == NULL ) ////泄露!if ( (p = (_PVFV *) _realloc_crt(__onexitbegin,
_msize_crt(__onexitbegin) +
ONEXITTBLINCR * sizeof(_PVFV))) == NULL ) ////泄露!
2、以下地方出现资源泄露??嘎嘎if ((hFont = CreateFont(GetSystemMetrics(SM_CYMENUCHECK), 0, 0, 0,FW_NORMAL, 0, 0, 0, SYMBOL_CHARSET, 0, 0, 0, 0, _T("Marlett"))) != NULL) ////资源泄露!InitializeCriticalSection( &(pio->lock) ); ////资源泄露!if ((hMenu = ::LoadMenu(hInst, lpszMenuName)) == NULL) ////资源泄露!hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,pParentWnd->GetSafeHwnd(), AfxDlgProc); ////资源泄露!怎么定位到自己的程序中呢??用BC的CALL STACK出现访问某个DLL时权限不够的功能限制。
解决方案 »
- 继续PostMessage的问题,求解!!
- 想找到两幅图片重叠的一列
- 怎么样在CLISTBOX中控制字体?
- CListCtrl在大图标方式下,在各图标没被选择时,怎么令图标下的文字显示四行?
- 图片该存到哪里?数据库还是文件?
- 打开数据库 这么写有问题吗?
- 如何得到XML标签中的属性
- 怎样保存CTreeCtrl的数据。大家快来救命啊。
- 可以运行,但F5调试时出错是什么原因
- 一个服务器如何监听多个客户端
- 会COM和ADO的达人请进.莫名其妙的问题!
- 调用ORACLE存储过程的时候,能不能简单的使用“execute up_NDr2_SaveRecord @Computer =aaa,@DevID=bbb”
第二个方面的,资源泄露还没遇到过,学习了。
问题是,俺的程序运行三天三夜以后就能从资源管理器看出来内存增加了十几兆.
我怀疑这其中有可能有上述原因.还有可能是不是因为对数据库的操作,我在运行期间,不停的往数据库 Insert 数据,如果我停止这个操作,就能看到内存唰的一下降下来了。数据库操作也就是通过 ADO 来 Execute sql的insert语句罢了。是不是这种数据库操作可以造成泄漏呢??嘎嘎
开始检测以后,只就创建了 Connection 和 Recordset句柄,在此后,recordset根本没打开,也不进行操作。connection 也就是往数据表内插入数据罢了。
怎么会增加句柄和资源呢?
create出来的delete 了没有?这个是big gdi对象,如果不delete会很占内存loadmenu,CreateDialogIndirect等等你都要看看是否有对应的释放函数,我现在在网吧
嘎嘎,难道是界面绘制和刷新时候出问题。
可是....凡是自己做的GDI操作,能释放的都释放了的。
用了malloc而没有用free
当然会出现内存泄露。
2、
调用InitializeCriticalSection应使用DeleteCriticalSection释放
CreateFont和LoadMenu在Win32下应该不会有问题
CreateDialogIndirect中的lpDialogTemplate是一个Global内存对象,使用完毕后应用GlobalFree释放。