【发布时间】:2015-10-31 15:13:24
【问题描述】:
我遇到了这个问题,想知道是什么原因。
我的代码如下:
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;
};
并为向量中node 的每个实例中的字符串分配内存,我现在可以毫无问题地为graphA[i]->label 赋值。
这是为什么?任何回复将不胜感激。
【问题讨论】:
-
graph.reserve(5);=>graph.resize(5);应该修复它。你不需要指针和new。 -
尝试
graph.at(3)以获得更好的错误消息 -
reserve只是保留,你的向量仍然有零个元素 -
@tobi303:如果异常离开
main,则可能没有很好的错误消息。
标签: c++ vector segmentation-fault