Debug Assertion Failed! afxwin1.inl line:22

zjz8204 2010-08-24 05:45:22
小弟不才,向各位大哥请教。

我的工程是Single Dialog,先前没有任何问题,后来就出了问题。问题描述如下:

Debug和Release编译和连接时都没有问题,但在执行Debug时,出现断言错误:

Debug Assertion Failed!
afxwin1.inl
line:22

点击忽略时,可正常执行,且执行一两个小时都没问题。
点击重试时,出现afxcrit.cpp line 74错误。然后就是“应用程序发生异常,0x80000003位置为: 0x5f47d3b3“(每次都是这两个值)

调试时点重试,查看afxwin1.inl时,定位在
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{ ASSERT(afxCurrentInstanceHandle != NULL);
return afxCurrentInstanceHandle; }
line 22 : _AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()
{ ASSERT(afxCurrentResourceHandle != NULL);
return afxCurrentResourceHandle; }

在Stack中,AfxGetResourceHandle() line22+33bytes
afxFIndResourceHandle(...)
CRectTracker:Construct() (自写了一个类,其父类为CrectTracker)
...........

请各位帮忙解决一下,是什么类型的问题引起的?

...全文
1419 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjz8204 2010-08-31
  • 打赏
  • 举报
回复
to lazy_2010

是使用了十几个.dll,第三方的。但先前没有问题,后来就出问题了。

AFX_MANAGE_STATE(AfxGetStaticModuleState()); 加在哪里呢?

若是手动修改了.rc文件,遇到这种问题,如何修正过来呢?

多谢啊。先前没遇到过这种问题。
lazy_2010 2010-08-31
  • 打赏
  • 举报
回复
是否调用了什么 dll,将 module state 修改错了?

比如,使用了某些 extension dll,

或者没有写 AFX_MANAGE_STATE(AfxGetStaticModuleState()); 之类的库。

或者,是否修改了 .rc 文件之后出现的问题?
zjz8204 2010-08-31
  • 打赏
  • 举报
回复
没有多线程。
lazy_2010 2010-08-31
  • 打赏
  • 举报
回复
我的建议是。

如果是 dll 的问题:

首先分析是哪个函数调用之后,出现 AfxGetResourceHandle()==NULL 的问题;
然后,
如果这个 dll 是自己的 MFC 库,在输出函数的时候第一行,使用 AFX_xxx 的那个宏定义;
如果这个 dll 是第三方的,在调用前通过 AfxGetResourceHandle() 保存当前 HANDLE 值,在调用函数之后,调用 AfxSetResourceHandle() 恢复 HANDLE 值;
或者,你是否在 dll 的某个 callback 中调用函数的时候出现这个 ASSERT 的错误了;如果是,想办法在函数调用前,把 resource 的 HANDLE 保存起来进行调用。(这个比较复杂,可能没有讲清楚)

如果是修改 .rc 文件导致的问题,看看是否你的 resource.h 中某些 ID 值范围与缺省的资源 ID 进行冲突了,找到冲突的 ID 值,修改 resource.h ,然后 rebuild all。
lazy_2010 2010-08-30
  • 打赏
  • 举报
回复
是否存在多线程的情况?
zjz8204 2010-08-30
  • 打赏
  • 举报
回复
没人回答了?自己顶一下。
zjz8204 2010-08-25
  • 打赏
  • 举报
回复
to oyljerry:

如何添加debug log 输出?
oyljerry 2010-08-24
  • 打赏
  • 举报
回复
添加debug Log输出,然后定位到出错的代码
zjz8204 2010-08-24
  • 打赏
  • 举报
回复
to guoxuqu:

哪一句去掉了,也没用。我怀疑也是这一句,但不知如何改。因为先前没有问题。
guoxuqu 2010-08-24
  • 打赏
  • 举报
回复
ArrayIndex = s_RoiTrackerArray.Add(this);
这句去掉看看。
zjz8204 2010-08-24
  • 打赏
  • 举报
回复
class CRoiTracker : public CRectTracker
{
private:
static CArray<CRoiTracker*, CRoiTracker*> s_RoiTrackerArray; //记录所有图形
int ArrayIndex; //记录对象在数组的位置

protected:
CRect m_CanvasRect; //画布矩形大小
CRect m_LastRect; //移动前的矩形
CPoint m_CanvasCenter; //画布中心
BOOL m_bVisible; //是否显示
INT m_nHitTest;


public:
CRoiTracker()
{
ArrayIndex = s_RoiTrackerArray.Add(this);
m_pMilWrapper = NULL;
m_bVisible = FALSE;
m_LastRect = m_rect;
m_CanvasRect = m_rect;
m_CanvasCenter = m_rect.CenterPoint();
m_nHitTest = 0;
m_nStyle = CRectTracker::solidLine | CRectTracker::resizeOutside;
};


这个没有变动的,先前可以,过了段时间就不可以了。
na_he 2010-08-24
  • 打赏
  • 举报
回复
检查CRectTracker这个类的构造函数,看是否有未初始化或者不合理的部分。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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