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

关于出了什么问题的任何线索?该应用程序在早些时候运行良好,但我把它搞砸了。

4

3 回答 3

1

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

于 2009-09-15T08:43:29.143 回答
0

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

于 2013-05-28T08:18:54.570 回答
0

当我无意中在resource.h. 如果您唯一更改的是添加/删除几个按钮,我会先检查一下,然后尝试完全重建。

于 2009-09-15T14:14:44.297 回答