C ++ SIGSEGV Ошибка сегментации в цикле - PullRequest
1 голос
/ 09 мая 2011

У меня есть следующий код, который заканчивается ошибкой сегментации.

    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 ]

6 голосов
/ 09 мая 2011

Время должно, вероятно, читать

while (i < fileLines.size() && fileLines[i].find("message") == string::npos)
1 голос
/ 09 мая 2011

Это:

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

должно быть:

  while (i < fileLines.size() && fileLines[i].find("message") == string::npos )
0 голосов
/ 09 мая 2011

Я не уверен, что это как-то связано с ошибкой, которую вы получаете, но у вас, похоже, проблема с i++ в строке 7. Это может увеличить i, даже если i == fileLines.size() - 1, поэтому fileLines[i].find("message") в следующей строке получит доступ к несуществующему элементу.

...