vect <mystruct *> var;访问违规阅读位置</mystruct *>

时间:2015-03-24 21:19:32

标签: c++ vector visual-studio-2013 stdvector

我定义了以下结构

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);

它不起作用,有关如何修复它的任何建议? 如果我尝试更改键值,它的工作原理;对于前:  &#39; newNode-&gt; key = ...`工作正常 谢谢!

1 个答案:

答案 0 :(得分:1)

在C ++中使用new,而不是malloc

malloc仅分配内存但不会调用构造函数。例如。您的vector未初始化,因此尝试访问它(例如push_back)会调用未定义的行为。

new都会分配内存并调用构造函数,因此您的vector将使用其默认构造函数进行初始化,从而创建一个空的vector

此外,在C ++中,您可以像这样声明struct

struct NodeMulti { ... };

即。不需要typedef。同样在您的代码中,您甚至没有在typedef声明中指定名称,因此it has no effect