求助一个程序崩溃问题,不知道是不是堆栈溢出
我们编写了一个数据编译的工程,从main函数里调用数据编译的函数入口(比如叫Compile()),编译没问题,测试的时候,多次运行这个函数while(true)Conpile();结果经常在某些分配内存的地方,如new,assign等崩溃,请问这是什么原因,如果是内存泄露,分配不出内存顶多返回false,应该不至于崩溃,怀疑是堆栈溢出,但是如果是堆栈的问题,程序每次执行完Compile,堆栈的状态不是应该和执行前一样吗?为什么执行几次没问题,执行次数多了就会崩?
[解决办法]
谁说new失败返回false,直接抛出异常的。
[解决办法]
不过VC6对C++标准支持的不好,会返回false。
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
[解决办法]
查看调用堆栈。看自己的代码死在那里了,在那里设断点,跟踪!问题解决!~