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

发布于 2024-11-05 18:30:06 字数 1086 浏览 0 评论 0原文

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

    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 循环时,我不再收到此错误。但我不知道这个循环有什么问题。

感谢您的支持

I have the following code which ends up in a segmentation fault.

    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();
    }

When i remove the while-loop, i don't get this error anymore. But i don't know what's wrong with this loop.

Thx for your support

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

戴着白色围巾的女孩 2024-11-12 18:30:06

while 可能应该读

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

The while should probably read

while (i < fileLines.size() && fileLines[i].find("message") == string::npos)
带上头具痛哭 2024-11-12 18:30:06

这:

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

应该是:

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

This :

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

should be:

  while (i < fileLines.size() && fileLines[i].find("message") == string::npos )
空城缀染半城烟沙 2024-11-12 18:30:06

我不确定它是否与您收到的错误有关,但您似乎在第 7 行的 i++ 上遇到了问题。即使 i ,它也可能会增加 i == fileLines.size() - 1,因此下一行的 fileLines[i].find("message") 将访问不存在的项目。

I'm not sure if it has anything to do with the error you're getting, but you seem to have a problem with the i++ on line 7. It may increase i even when i == fileLines.size() - 1, so fileLines[i].find("message") on the next line would access a non-existing item.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文