为什么我在向 class 内的数据向量插入元素时出现分段错误?
Why I am getting a segmentation fault while inserting elements to the vector of data inside the class?
我在向量中插入数据时收到分段错误。我认为向量没有分配。
我不想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
访问第一个元素 (Set[0]
) 是未定义的行为。
默认构建的向量为空。
I think the vector is not allocated.
是的,你走对了。由于 accessing un-allocated 沿线向量,您有未定义的行为。
Set[0].x = 5; Set[0].y = 6;
您可以简单地 std::vector::push_back
or std::vector::emplace_back
构造 data
如下,不需要通过下标运算符访问 vector:
void insert()
{
Set.push_back(data{ 5, 6 });
// or
// Set.emplace_back(data{ 5, 6 });
}
注意:如果data
包含,non-primitive类型,则考虑使用std::vector::emplace_back
构造data
in-place,而不是 default-constructing 并分配成员,如在给定代码中那样。您还需要为 data
提供合适的构造函数。
默认情况下,创建的向量的大小为 0,因此尝试访问元素 Set[0] 是错误的,并且会产生分段错误(这里意味着访问不存在的内容)。
使用std::vector::push_back避免分段错误
您可以像这样重写函数:
void insert()
{
data newItem;
newItem.x = 5; newItem.y = 6
Set.push_back(newItem)
}
我在向量中插入数据时收到分段错误。我认为向量没有分配。
我不想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
访问第一个元素 (Set[0]
) 是未定义的行为。
默认构建的向量为空。
I think the vector is not allocated.
是的,你走对了。由于 accessing un-allocated 沿线向量,您有未定义的行为。
Set[0].x = 5; Set[0].y = 6;
您可以简单地 std::vector::push_back
or std::vector::emplace_back
构造 data
如下,不需要通过下标运算符访问 vector:
void insert()
{
Set.push_back(data{ 5, 6 });
// or
// Set.emplace_back(data{ 5, 6 });
}
注意:如果data
包含,non-primitive类型,则考虑使用std::vector::emplace_back
构造data
in-place,而不是 default-constructing 并分配成员,如在给定代码中那样。您还需要为 data
提供合适的构造函数。
默认情况下,创建的向量的大小为 0,因此尝试访问元素 Set[0] 是错误的,并且会产生分段错误(这里意味着访问不存在的内容)。
使用std::vector::push_back避免分段错误
您可以像这样重写函数:
void insert()
{
data newItem;
newItem.x = 5; newItem.y = 6
Set.push_back(newItem)
}