C ++ Debug断言错误/崩溃(循环时)

时间:2017-03-22 23:36:54

标签: c++ debugging

由于崩溃,我正在调试一个非常旧的应用程序(Visual C ++ 6)。我已经将崩溃隔离到了一个while循环。这个应用程序从数据库中读取一串字符串,并将它们输出到一个文件中进行处理。

虽然从数据库中检索到的所有字符串并将它们包装在分隔符/结束字符中,但此循环似乎正在循环。但是,while循环会随机崩溃。

我有一组包含大约2000个字符串的特定数据,并且在处理过程中的某个时刻,循环将崩溃(或者在调试模式下给出调试断言错误)。奇怪的是,这个循环每次都不会停在同一个位置(我首先想到的是坏字符串),这也不常见。这个应用程序已经处理了数十万行多年,但它在某个随机的特定数据集上扼杀了。

我最初添加了一些日志记录代码(我已经删除了,看起来崩溃发生在WHILE行的实际执行/评估上。

我应该寻找什么特别的东西吗?我想也许这是一个索引超出范围的错误,但我认为如果是这种情况,它会在相同的数据集的相同位置一致地发生。有没有人看到这个代码我应该仔细检查,或者可以提供任何关于如何更好地解决这个问题的建议?

//Definitions
CStringList          m_stlMessageList;
CStringList          m_stlMessageIDList;    


//Populating list
rec.Open(CRecordset::forwardOnly, strSQL);
while (!rec.IsEOF())
{
    rec.GetFieldValue("string_id", strMessageID);
    strMessageID.TrimRight();
    rec.GetFieldValue("string_text", strMessage);
    strMessage.TrimRight();
    rec.GetFieldValue("string_destination", strDestination);
    strDestination.TrimRight();
    rec.GetFieldValue("string_ip", strIP);
    strIP.TrimRight();

    //Add to the Lists...
    m_stlMessageIDList.AddTail(strMessageID);
    m_stlMessageList.AddTail(strMessage);

    rec.MoveNext();
}



//Code thats crashing.
CString strSegment, strTemp, strTmp;
BOOL    bFirst = TRUE;
POSITION POS = m_stlMessageList.GetHeadPosition();
while (POS)
{

                strSegment     = m_stlMessageList.GetNext(POS);                                                  
                strTemp        = strSegment.Left(4);


                strSegment.Format(strSegment + "%c", 13);
                if (POS)
                {
                                strTmp = m_stlMessageList.GetPrev(POS);
                                m_stlMessageList.SetAt(POS, strSegment);
                                strTmp = m_stlMessageList.GetNext(POS);
                }
                else
                {
                                m_stlMessageList.RemoveTail();
                                m_stlMessageList.AddTail(strSegment);
                }                                                              

}              

0 个答案:

没有答案