MFC应用程序在关闭时崩溃

MFC应用程序在关闭时崩溃,mfc,assert,crash,Mfc,Assert,Crash,我有一个工作的MFC应用程序(一个对话框应用程序),我删除了它的一些按钮并添加了一个新按钮,但现在当它关闭时,应用程序崩溃。它在一个ASSERT()宏中失败。调试断言在这些行上失败 文件:afxtempl.h 电话号码:558 当我查看代码时,它是这样的 template<class TYPE, class ARG_TYPE> void CArray<TYPE, ARG_TYPE>::AssertValid() const { CObject::AssertVal

我有一个工作的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
模板
void CArray::AssertValid()常量
{
CObject::AssertValid();
如果(m_pData==NULL)
{
断言(m_nSize==0);
断言(m_nmaxize==0);
}
其他的
{
//在这里它失败了
断言(m_nSize>=0);
断言(m_nmaxize>=0);

断言(m_nSize我想看看导致断言的堆栈跟踪中有什么,以及各种成员变量中有什么。例如,如果原因是双重删除,那么在调试构建中,您希望在值中看到值0xdddddd,因为调试分配器将释放的内存设置为该值。

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

几个月前,我遇到了同样的问题-关闭时MFC崩溃。后来发现在析构函数中,我试图删除或释放一些已删除但在它之前通过空检查的emory。可能您可以检查这一点。

m\n size的值是多少?从资源中删除控件并不总是足够的。可能有代码仍在尝试使用它。