Ani*_*aha 5 c++ insert segmentation-fault stdvector c++11
我在向量中插入数据时收到分段错误。我认为载体没有分配。
我不想reserve大小。怎么做?
class A
{
private:
struct data
{
int x;
int y;
};
std::vector<data>Set;
public:
void insert()
{
Set[0].x = 5; Set[0].y = 6;
}
};
A a;
a.insert(); // Segmentation Fault
Run Code Online (Sandbox Code Playgroud)
访问第一个元素(Set[0])是未定义的行为。
默认构造的向量为空。
我认为向量没有分配。
是的,您走在正确的轨道上。由于沿线访问未分配的向量,您有未定义的行为。
Set[0].x = 5; Set[0].y = 6;
Run Code Online (Sandbox Code Playgroud)
您可以简单地std::vector::push_back按如下方式std::vector::emplace_back构造data,不需要通过下标运算符访问向量:
void insert()
{
Set.push_back(data{ 5, 6 });
// or
// Set.emplace_back(data{ 5, 6 });
}
Run Code Online (Sandbox Code Playgroud)
注意:如果data包含非基本类型,则考虑使用std::vector::emplace_back构造data in-place,而不是像给定代码中那样默认构造和分配成员。您还需要为其提供合适的构造函数data。