有关堆栈泄露的调试

russilong 2006-04-13 04:07:05
做较大的数值计算的程序编写时,往往会开许多的动态数组,并且数组中的元素很多,这样弄不好一进入主程序就会遇到堆栈泄露的问题,不知道有经验的如何处理这里的动态数组?如果遇到这些问题,有什么调试技巧?我对VC调试并不熟悉,可以说得详细些。多谢!
...全文
229 点赞 收藏 8
写回复
8 条回复
Bruceleexiaokan 2006年04月13日
智能指针是不错的选择,不过好的架构设计是至关重要的
回复 点赞
strangerryf 2006年04月13日
把下面的这个memleak.h东西贴到你的代码,可以在vc的IDE的debug模式看到内存泄漏的地方。具体查MSDN

#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>

class leak_reporter
{
private:
static leak_reporter instance;
leak_reporter()
{
_CrtDumpMemoryLeaks();
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG );
}
};
leak_reporter leak_reporter::instance;
回复 点赞
yuanchuang 2006年04月13日
如果你是在类里面的话,可以把释放放在一个private level的member function里面
要释放时,调用这个函数。
回复 点赞
yuanchuang 2006年04月13日
如果你是在类里面的话,可以把释放放在一个private level的member function里面
要释放时,调用这个函数。
回复 点赞
iamwiner 2006年04月13日
楼上说的都对.
回复 点赞
Twinsen 2006年04月13日
对于需要动态添加数据的数值计算程序,可以使用STL中的容器。而且标准库中

也有很多数值计算用的算法(在numeric头文件中)。
回复 点赞
sankt 2006年04月13日
首先纠正一下概念
堆栈就是栈,栈里面存放的是自动变量,有系统自动释放,不会造成栈泄漏

动态分配是在堆上,一个原则就是:
new 和 delete 匹配出现,方能杜绝内存泄漏
回复 点赞
healer_kx 2006年04月13日
动态数组,其实你做的只是数学计算的话,细心就可以将每一个new的delete掉。
另外,也可以试一试具有引用计数性质的智能指针来维护你的数组。
特别推荐的是Loki的SmartPtr<,,,>具体的模板参数你可以精心选择。
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告