我有一个正常工作的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
关于出了什么问题的任何线索?该应用程序在早些时候工作正常,但我搞砸了。
答案 0 :(得分:1)
我想看看导致断言的堆栈跟踪中的内容 - 也是各种成员变量中的内容。例如,如果原因是双重删除,则在调试版本中,您可能希望在值中看到值0xdddddddd,因为调试分配器将释放的内存设置为此值。
答案 1 :(得分:0)
当我无意中在resource.h
中定义了重复的资源ID时,我看到了这样的疯狂事情。如果你唯一改变的是添加/删除几个按钮,我会先检查一下然后尝试完全重建。
答案 2 :(得分:0)
几个月前我遇到了同样的问题 - MFC在关闭时崩溃了。后来发现在析构函数中我试图删除或释放一些已经删除的内存,但不知何故在它之前传递了空检查。可能你可以检查这一点。