xyz*_*xyz 1 c++ pointers vector
出于某种原因,我遇到了分段错误; 我正在使用一个指针向量,它指向一个类对象.基本上我需要一个节点,它有一个指向其他节点的指针向量,另一个节点用于制作多图.这是我的代码的相关部分:
node.h:
#ifndef NODE_H
#define NODE_H
class node
{
public:
string content()
vector<node*> next; //causing the error
void add_arc(node a);
string rna_frag;
#endif
Run Code Online (Sandbox Code Playgroud)
node.cpp:
void node::add_arc(node a)
{
node *b = &a; //b->content() works fine here
next.push_back(b);
}
string node::content()
{
return rna_frag;
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中:
int main()
{
vector<node> nodes;
node a;
node b;
node c;
a.add_arc(b);
a.add_arc(c);
a.rna_string = "G";
nodes.push_back(a);
nodes.push_back(b);
nodes.push_back(c);
cout << nodes[0].content() << endl; //prints "G", works fine
cout << nodes[0].next.size() << endl; // prints "2", works fine
cout << nodes[0].next[0]->content() << endl; //segmentation fault
//cout << nodes[0].next->content() << endl; //also segmentation fault
//cout << nodes[0].next[0]->rna_frag << endl; //also segmentation fault
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,nodes [0]的字符串是"G"并指向其他2个节点,因此前2个couts工作正常.但是当我访问向量的内容时,它只会崩溃并给出分段错误错误.谁知道为什么?
在add_arc
你存储参数的地址,a
然后在函数退出时销毁 - 所以你有未定义的行为.
你打电话的时候也在复制节点nodes.push_back()
,这会让你感到非常悲痛.
您将需要停止复制或编写正确的复制构造函数(然后遵循3或5的规则).