gpt4 book ai didi

c++ - 访问 vector 中指针的成员函数时出现段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:25:23 25 4
gpt4 key购买 nike

出于某种原因,我遇到了段错误;我正在使用指针 vector ,它指向一个类对象。基本上我需要一个节点,它有一个指向其他节点的指针 vector ,在其他节点中制作 multimap 。这是我的代码的相关部分:

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

节点.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;
}

ma​​in.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
}

在这种情况下,nodes[0] 的字符串是“G”并指向另外 2 个节点,因此前 2 个 cout 工作正常。但是,当我访问 vector 的内容时,它会崩溃并出现段错误。有人知道为什么吗?

最佳答案

add_arc 中,您正在存储参数 a 的地址,然后在函数退出时销毁该地址 - 因此您有未定义的行为。

当您调用 nodes.push_back() 时,您也在复制节点,这会给您带来很多麻烦。

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

关于c++ - 访问 vector 中指针的成员函数时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37091616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com