C ++ SIGSEGV循环中的分段错误

时间:2011-05-09 12:27:15

标签: c++ file-io while-loop sigsegv

我有以下代码,最终导致分段错误。

    for (int a=0; a<inputFileList.size(); a++)
    {
        fileLines = readFile(inputFileList[a].c_str());
        for (int i = 0; i < fileLines.size(); i++)
        {
            if (fileLines[i].find("text") != string::npos)
            {
                bool warnFound = false, errFound = false;
                i++;
                while (fileLines[i].find("message") == string::npos && i < fileLines.size())
                {
                    if (fileLines[i].find("error") != string::npos)
                        errFound = true;
                    else if (fileLines[i].find("warning") != string::npos)
                        warnFound = true;
                    i++;
                }
                i--;
                if (errFound)
                    errCtr++;
                else if (warnFound)
                    warnCtr++;
                else
                    okCtr++;
            }
        }
        fileLines.clear();
    }

当我删除while循环时,我不再收到此错误。但我不知道这个循环有什么问题。

感谢您的支持

3 个答案:

答案 0 :(得分:6)

应该阅读

while (i < fileLines.size() && fileLines[i].find("message") == string::npos)

答案 1 :(得分:1)

这:

  while (fileLines[i].find("message") == string::npos && i < fileLines.size())

应该是:

  while (i < fileLines.size() && fileLines[i].find("message") == string::npos )

答案 2 :(得分:0)

我不确定它是否与您收到的错误有关,但您似乎第7行的i++出现问题。即使{{1} },所以下一行的i == fileLines.size() - 1将访问一个不存在的项目。