西西河

主题:【求助】program exit problem -- 龙骨

共:💬4 🌺1 新:
全看树展主题 · 分页首页 上页
/ 1
下页 末页
家园 【求助】program exit problem

Program made using MS vs2008, in C++.

When try to exit it, the program crashes, with error message mentioning kernel32.dll and mfc42.dll errors.

Checked by BoundsChecker, only found out that it crashes after my codes are run. In short, it crashes after enters OnDestroyWindows(), with only MS VC++ API functions that follows.

Error message by BoundsChecker is:

"Application conflict: attempting to call global_operator_delete on 0x...; pointer was allocated by malloc"

Anybody knows why? Thanks a lot!!!

关键词(Tags): #windows#C++#exit#kernel32.dll#mfc42.dll
家园 delete null point at exit

if(point != NULL) {

delete point;

point = NULL;

}

家园 个人经验

一般情况下,debug模式会跟踪到出现问题的语句;

如果debug模式而release模式有问题,就只能用写文件的方式逐段跟踪。

下面的仁兄说的对,很可能删除了空指针。

家园 试着分析一下

看起来是多次delete动态分配的对象造成的。有两种可能:

1 你自己new了一些全局对象,然后在delete的时候没有匹配好。既然你用的是vs2008, 建议你把所有的new语句全部换成tr1::shared_ptr, http://msdn.microsoft.com/en-us/library/bb982026%28v=VS.90%29.aspx 然后去掉所有的delete 相关语句,把所有raw pointer 接口换成tr1::shared_ptr类型的对象。一定要所有,不然也会有可能出错。

2 这种可能较大,与你用的MFC框架有关。你的在CView的某继承类的某个消息处理函数比如WM_DESTROY之类导致CView的继承类非正常销毁。CView的继承类是MFC框架动态生成并管理的,所以容易操作不当。建议仔细检查每个窗体(CView的继承类)中的退出,关闭动作相关的函数。

关键词(Tags): #c++ tr1 shared_ptr
全看树展主题 · 分页首页 上页
/ 1
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河