退出分段错误 ¿如何解决此问题?

Exited segmentation fault ¿how can i fix this problem?

本文关键字:解决 问题 错误 分段 何解决 退出      更新时间:2023-10-16

有人知道为什么我不能为当前结构中的每个num_episodio向量赋值吗?

#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct serie{
vector<int> num_episodio;
};
int main(){
//create a vector of structs
vector<serie> serie_individual;

serie_individual.push_back(serie());
serie_individual[0].num_episodio[0]=1;
cout<<serie_individual[0].num_episodio[0];
}
serie_individual[0].num_episodio

是一个空向量。serie_individual[0].num_episodio[0]通过越界访问索引来表现出未定义的行为。

看到仅仅因为你在serie_individual中推送一个元素并不意味着 该元素中的矢量num_episodio填充了数据... 然后,当您这样做时:

serie_individual[0].num_episodio[0]

您正在尝试获取空向量的第一个元素...

这就是代码中错误的原因...

解决此问题的一种选择是在系列中定义构造函数并插入其向量 喜欢:

struct serie
{
serie(int i)
{
num_episodio.push_back(i);
}
std::vector<int> num_episodio;
};

并且您必须像以下方式调整代码:

int main()
{
struct serie
{
serie(int i)
{
num_episodio.push_back(i);
}
std::vector<int> num_episodio;
};
std::vector<serie> serie_individual;
serie_individual.push_back(serie(2));
std::cout << "serie before: " << serie_individual[0].num_episodio[0] << std::endl;
serie_individual[0].num_episodio[0]=10;
std::cout << "serie after: " << serie_individual[0].num_episodio[0];
return 0;
}

它实际上是对下一行的空指针错误的取消引用,其中num_episodioNULL

serie_individual[0].num_episodio[0]=1;  

serie_individual[0].num_episodio[0]=1相当于*(serie_individual[0].num_episodio)=1;

以下是您可以使用此链接重现/调试的内存错误

Memory access error: dereferencing a null pointer; abort execution.
# Writing 4 bytes to address 0x0.
#
# Stack trace (most recent call first) of the write.
# [0]  file:/a.cc::19, 1
# [1]  [libc-start-main]