vect<myStruct*> 变量;访问违规读取位置
vect<myStruct*> var; access violation reading location
我定义了以下结构
typedef struct NodeMulti{
int key;
vector<NodeMulti*> child;
};
在函数中假设我有:
NodeMulti* newNode = (NodeMulti*)malloc(sizeof(NodeMulti));
NodeMulti* anotherNode = (NodeMulti*)malloc(sizeof(NodeMulti));
newNode->child.push_back(anotherNode);
它不起作用,关于如何修复它有什么建议吗?
如果我尝试更改键值,它会起作用;例如:
'newNode->key =...` 工作正常
谢谢!
在 C++ 中使用 new
,而不是 malloc
。
malloc
只分配内存,不调用构造函数。例如。您的 vector
未初始化,因此尝试访问它(例如 push_back
)会调用未定义的行为。
new
都分配内存并调用构造函数,因此您的 vector
将使用其默认构造函数进行初始化,这会创建一个空的 vector
.
此外,在 C++ 中,您可以像这样声明一个 struct
:
struct NodeMulti { ... };
即不需要 typedef
。同样在您的代码中,您甚至没有在 typedef
声明中分配名称,因此 it has no effect.
我定义了以下结构
typedef struct NodeMulti{
int key;
vector<NodeMulti*> child;
};
在函数中假设我有:
NodeMulti* newNode = (NodeMulti*)malloc(sizeof(NodeMulti));
NodeMulti* anotherNode = (NodeMulti*)malloc(sizeof(NodeMulti));
newNode->child.push_back(anotherNode);
它不起作用,关于如何修复它有什么建议吗? 如果我尝试更改键值,它会起作用;例如: 'newNode->key =...` 工作正常 谢谢!
在 C++ 中使用 new
,而不是 malloc
。
malloc
只分配内存,不调用构造函数。例如。您的 vector
未初始化,因此尝试访问它(例如 push_back
)会调用未定义的行为。
new
都分配内存并调用构造函数,因此您的 vector
将使用其默认构造函数进行初始化,这会创建一个空的 vector
.
此外,在 C++ 中,您可以像这样声明一个 struct
:
struct NodeMulti { ... };
即不需要 typedef
。同样在您的代码中,您甚至没有在 typedef
声明中分配名称,因此 it has no effect.