访问向量中指针的成员函数时出现分段错误

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工作正常.但是当我访问向量的内容时,它只会崩溃并给出分段错误错误.谁知道为什么?

Ala*_*kes 5

add_arc你存储参数的地址,a然后在函数退出时销毁 - 所以你有未定义的行为.

你打电话的时候也在复制节点nodes.push_back(),这会让你感到非常悲痛.

您将需要停止复制或编写正确的复制构造函数(然后遵循3或5的规则).

  • 啊,谢谢你,我忘了把'a'作为参考,我会接受你关于复制的建议 (2认同)