导致这个错误的原因具体有很多种表现,我最近遇到的一种情况是,在主窗口的构造函数里,其中有一个初始化函数里面有一个CList列表容器越界或空值,导致构造函数初始化失败,就跳了这个错误。
如下图所示
CBoxChannelWnd是构造函数,程序开始跑的时候会先调用这个来给诸多必要的变量初始化,CKafka::Instance()->InitConfData()是其中一个需要调用的初始化函数。
这个错误就是出现在InitConfData()里,如下是错误代码,是m_csIPArr和m_csPortArr这两个CList容器,一开始是空值,但是m_iIndexIp不为空,可能造成了访问越界,导致奔溃,然后窗口构造函数调用失败便跳出Fail to create empty document!
strTemp = m_csIPArr[m_iIndexIp] + _T(":") + m_csPortArr[m_iIndexIp];
m_strBrokerListData = (CStringA)strTemp.GetBuffer();
m_iIndexIp++;
if (m_iIndexIp >= m_iIPCount)
{
m_iIndexIp = 0;
}
正确的代码是做了限制空列表访问控制的,如下操作,很简单,加了个if语句而已
if (m_csIPArr.GetSize() > 0 && m_csPortArr.GetSize() > 0)
{
strTemp = m_csIPArr[m_iIndexIp] + _T(":") + m_csPortArr[m_iIndexIp];
m_strBrokerListData = (CStringA)strTemp.GetBuffer();
m_iIndexIp++;
if (m_iIndexIp >= m_iIPCount)
{
m_iIndexIp = 0;
}
}
C++地址控制意识还是要提高呀兄弟,希望对你有用^_^