MFC应用程序关闭时崩溃

3

我有一个可用的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

有没有什么线索表明出了什么问题?这个应用程序之前一直运行良好,但是我把它搞砸了。


m_nSize 的值是多少? - Naveen
仅仅从资源中删除控件并不总是足够的。也许还有代码尝试使用它。 - Nick Dandoulakis
3个回答

1

我想看看断言之前的堆栈跟踪,以及各种成员变量中的内容。例如,如果原因是双重删除,在调试构建中,您应该期望在该值中看到值0xdddddddd,因为调试分配器将释放的内存设置为此值。


0
几个月前我遇到了同样的问题 - MFC在关闭时崩溃。后来发现在析构函数中,我试图删除或释放一些已经被删除但在空值检查之前通过的内存。也许你可以检查一下这个点。

0

我曾经遇到过类似疯狂的问题,当时我不小心在resource.h中定义了重复的资源ID。如果你唯一改变的是添加/删除几个按钮,我建议你首先检查这个问题,然后尝试进行完整的重建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接