从 C++ 中的函数返回时出现分段错误

Segmentation fault while returning from function in c++

我使用 stringstream 来解析字符串,但在退出函数时意外出现分段错误。

bool check_if_condition(int a)
{
    string polygonString1="19.922379 51.666267 19.922381 51.665595 19.921547 51.665705 19.921218 51.665753 19.920787 51.665815 19.919753 51.665960 19.919952 51.666897 19.920395 51.666826 19.920532 51.667150 19.920830 51.667748 19.920989 51.667905 19.921690 51.667906 19.922141 51.662866 19.922855 51.668696 19.922664 51.668237 19.922610 51.668025 19.922464 51.667451 19.922355 51.666732 19.922379 51.666267";

    double buf1; // Have a buffer string
    stringstream ssPolygonString1(polygonString1); // Insert the string into a stream

    double polygon1[2]; // Create vector to hold our words
    int iterPoly1=0;
    while (ssPolygonString1 >> buf1)
    {
        polygon1[iterPoly1]=(buf1);       
        cout<<"buf1="<<buf1<<"\n";
        iterPoly1++;
    }
    ssPolygonString1.str("");
    cout<<"Return true";
    return true;
}

main()
{
    check_if_condition(1);
}

有人可以帮我理解函数调用有什么问题吗?

我正在使用 c++11

我 运行 它在 https://www.tutorialspoint.com/compile_cpp11_online.php 上,它给我总线错误(核心已转储)

我假设当你说 double polygon1[2] 时你想通过你的评论创建一个向量。

如果您使用矢量,您的代码将有效。

此外,当您使用矢量时,请确保使用 vector.push_back();

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

using namespace std;
bool check_if_condition(int a)
{
    string polygonString1 = "19.922379 51.666267 19.922381 51.665595 19.921547 51.665705 19.921218 51.665753 19.920787 51.665815 19.919753 51.665960 19.919952 51.666897 19.920395 51.666826 19.920532 51.667150 19.920830 51.667748 19.920989 51.667905 19.921690 51.667906 19.922141 51.662866 19.922855 51.668696 19.922664 51.668237 19.922610 51.668025 19.922464 51.667451 19.922355 51.666732 19.922379 51.666267";

    double buf1; // Have a buffer string
    stringstream ssPolygonString1(polygonString1); // Insert the string into a stream
    vector<double> polygon1; // Create vector to hold our words
    int iterPoly1 = 0;
    while (ssPolygonString1 >> buf1)
    {
        //polygon1[iterPoly1] = (buf1);
        polygon1.push_back(buf1); // Add buf1 to vector.
        cout << "buf1=" << buf1 << "\n";
        iterPoly1++;
    }
    ssPolygonString1.str("");

    //Print vector to show it works!
    for (int i = 0; i < polygon1.size(); i++)
    {
        cout << polygon1.at(i) << endl;
    }
    cout << "Return true";
    return true;
}

int main()
{
    check_if_condition(1);

    system("pause");

    return 0;
}

错误在行中: polygon1[iterPoly1]=(buf1);

因为向量的长度是 2 而 iterPoly 超过 2。所以行为是意外的。