运算符<<分段错误

时间:2020-04-02 12:48:57

标签: c++ vector segmentation-fault operator-overloading

我正在尝试使用(学习)C ++中的Vector,因此我将其编写为一个简单示例。但是我收到了“分段错误:核心已转储”的错误,并且我没有发现错误的位置和原因。有人可以解释一下我是什么吗?

'''

struct Vertex {

    int x,y,z;
};


std::ostream& operator<<(std::ostream& stream, const Vertex& vertex) {

    stream << vertex.x << ", " << vertex.y << vertex.z;
    return stream;
}


int main() {

    std::vector<Vertex> vertices;
    vertices.push_back({1,2,3});

    for(int idx = 0; vertices.size(); idx++)
        std::cout << vertices[idx] << std::endl;
}

'''

是否由于运算符重载(<<)而导致错误?这只是预感。因为,当我使用g ++ 11进行编译时,它可以正常编译,但是当我看到输出(使用命令./a.out)时,就会发生分段错误。因此,我很困惑。

2 个答案:

答案 0 :(得分:0)

您的错误处于for循环的情况下。您写了vertices.size()。将其更改为idx<vertices.size(),就可以了。 在使用它时,您可能需要更改重载运算符,以在yz之间也包含一个分隔符;)

答案 1 :(得分:0)

应用了2个修改:

  1. 添加包含
#include <vector>
#include <iostream>
  1. 修复循环条件
for(int idx = 0; idx < vertices.size(); idx++)
    std::cout << vertices[idx] << std::endl;

完整代码应该可以正常工作

#include <vector>
#include <iostream>

struct Vertex {
    int x,y,z;
};

std::ostream& operator<<(std::ostream& stream, const Vertex& vertex) {
    stream << vertex.x << ", " << vertex.y << ", " << vertex.z;
    return stream;
}

int main() {
    std::vector<Vertex> vertices;
    vertices.push_back({1,2,3});

    for(int idx = 0; idx < vertices.size(); idx++)
        std::cout << vertices[idx] << std::endl;
}