【问题标题】:operator << Segmentation Fault运算符 << 分段错误
【发布时间】:2020-07-14 10:44:56
【问题描述】:

我正在尝试在 C++ 中使用(学习)向量,因此我将其编写为一个简单的示例。但是我收到“分段错误:核心转储”的错误,我不知道错误在哪里以及是什么。有人可以解释一下,它是什么吗?

'''

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

'''

是否因为运算符重载(

【问题讨论】:

  • 检查你的 for 循环条件。
  • 看看range-based for loop,避免这样的错别字很有帮助
  • 如何迭代 std::vector(不同方式):stackoverflow.com/questions/409348/…
  • 当我使用 g++11 编译时,它编译正常 -- 编译正常意味着没有语法错误。它与程序是否存在逻辑错误无关,如果您仔细查看您的for循环,它包含这样的错误。

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


【解决方案1】:

您的错误在for 循环的条件下。你写了vertices.size()。将其更改为idx&lt;vertices.size(),您应该没问题。 当您使用它时,您可能希望更改您的重载运算符以在yz 之间包含一个分隔符;)

【讨论】:

    【解决方案2】:

    应用了 2 处修改:

    1. 添加包含
    #include <vector>
    #include <iostream>
    
    1. 修复 for 循环条件
    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-21
      • 1970-01-01
      • 2014-11-30
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 2016-01-17
      相关资源
      最近更新 更多