运算符 << 分段错误
operator << Segmentation Fault
我正在尝试使用(学习)C++ 中的向量,因此我将其编写为一个简单示例。但是我得到了 'Segmentation fault: core dumped' 的错误,但我不知道错误在哪里,是什么错误。谁能给我解释一下,这是什么?
'''
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),出现分段错误。因此,我很困惑。
您的错误在 for
循环的条件中。你写了 vertices.size()
。将其更改为 idx<vertices.size()
,您应该没问题。
当你这样做的时候,你可能想改变你的重载运算符以在 y
和 z
之间包含一个分隔符 ;)
应用了 2 个修改:
- 添加包含
#include <vector>
#include <iostream>
- 修复 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;
}
我正在尝试使用(学习)C++ 中的向量,因此我将其编写为一个简单示例。但是我得到了 'Segmentation fault: core dumped' 的错误,但我不知道错误在哪里,是什么错误。谁能给我解释一下,这是什么?
'''
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),出现分段错误。因此,我很困惑。
您的错误在 for
循环的条件中。你写了 vertices.size()
。将其更改为 idx<vertices.size()
,您应该没问题。
当你这样做的时候,你可能想改变你的重载运算符以在 y
和 z
之间包含一个分隔符 ;)
应用了 2 个修改:
- 添加包含
#include <vector>
#include <iostream>
- 修复 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;
}