MFC应用程序在关闭时崩溃

时间:2009-09-15 07:53:19

标签: mfc assert crash

我有一个正常工作的MFC应用程序(一个对话框应用程序),我删除了一些按钮并添加了一个新按钮,但现在当它关闭时应用程序崩溃了。它在 ASSERT()宏之一失败。调试断言在这些行上失败

文件:afxtempl.h 行:558

当我查看代码时,它就像这样

template<class TYPE, class ARG_TYPE>
void CArray<TYPE, ARG_TYPE>::AssertValid() const
{
    CObject::AssertValid();

    if (m_pData == NULL)
    {
        ASSERT(m_nSize == 0);
        ASSERT(m_nMaxSize == 0);
    }
    else
    {
        // here it fails
        ASSERT(m_nSize >= 0);
        ASSERT(m_nMaxSize >= 0);
        ASSERT(m_nSize <= m_nMaxSize);
        ASSERT(AfxIsValidAddress(m_pData, m_nMaxSize * sizeof(TYPE)));
    }
}
#endif //_DEBUG

关于出了什么问题的任何线索?该应用程序在早些时候工作正常,但我搞砸了。

3 个答案:

答案 0 :(得分:1)

我想看看导致断言的堆栈跟踪中的内容 - 也是各种成员变量中的内容。例如,如果原因是双重删除,则在调试版本中,您可能希望在值中看到值0xdddddddd,因为调试分配器将释放的内存设置为此值。

答案 1 :(得分:0)

当我无意中在resource.h中定义了重复的资源ID时,我看到了这样的疯狂事情。如果你唯一改变的是添加/删除几个按钮,我会先检查一下然后尝试完全重建。

答案 2 :(得分:0)

几个月前我遇到了同样的问题 - MFC在关闭时崩溃了。后来发现在析构函数中我试图删除或释放一些已经删除的内存,但不知何故在它之前传递了空检查。可能你可以检查这一点。