c++ - 结构与对象属性和 C++ 中的 std::vector 的交互

标签 c++ vector segmentation-fault

我遇到过这个问题,想知道它的原因是什么。

我的代码如下:

struct node{
  bool leaf;
  std::string label;
};

//in main
std::vector<node> graph;
graph.reserve(5);

现在,如果我尝试分配 graph[3].leaf = true;, 一切顺利。

但是,如果我尝试对对象类型做同样的事情,比如 graphA[i].label = "01";, 我遇到段错误。

如果我将代码更改为

struct node{
  bool leaf;
  std::string * label;
};

并在 vector 中的每个 node 实例中为字符串分配内存,我现在可以毫无问题地为 graphA[i]->label 赋值.

这是为什么?如有任何回复,我们将不胜感激。

最佳答案

Now, if i try to assign graph[3].leaf = true;

您正在调用未定义的行为。

graph 在索引 3 处没有元素。事实上,它根本没有元素。您只为 vector 保留d 内存,但没有向它添加任何元素。

您可以使用 resize 添加 5 个默认构造的元素:

graph.resize(5);

关于c++ - 结构与对象属性和 C++ 中的 std::vector 的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33453118/

相关文章:

c - MPI 运行时错误 : Either Scatterv count error, segmentationfault,或卡住

c++ - 如何在 QWidget 子类之外调用 QMessageBox 静态 API

javascript - 在聚类向量和非聚类向量上使用样式

c++ - 如何使用 push_back 将元素随机添加到 vector 中

C++ OOP 段错误

c - NULL 指针与零段错误的比较

c++ - 链接我的库时出现 LNK2005 已定义错误

c++ - 通过返回 ifstream 的运算符重载段错误

c++ - 如何以最好、最简单的方式在文件中搜索?

c++ - vector <T *> 析构函数