使用VS 2013 Express可以重现此问题。当内部向量实现试图释放原始向量时,它崩溃了。
但是,使用'new'代替'malloc'可以解决问题。
任何人都能对此有所了解吗?
struct UndirectedGraphNode {
int label;
vector<UndirectedGraphNode *> neighbors;
UndirectedGraphNode(int x) : label(x) {};
};
int main(int argc, char** argv)
{
UndirectedGraphNode* node1 = (UndirectedGraphNode*)malloc(sizeof(UndirectedGraphNode));
node1->label = 0;
node1->neighbors.resize(2);
return 0;
}
答案 0 :(得分:6)
malloc
不会创建对象。它只是分配内存。要创建对象(至少是非平凡的对象),您需要调用构造函数。 new
这样做,malloc
没有。您的程序崩溃是因为您正在处理由malloc
分配的内存,就好像那里有一个对象,如果没有。
答案 1 :(得分:3)
使用时
UndirectedGraphNode* node1 = (UndirectedGraphNode*)malloc(sizeof(UndirectedGraphNode));
你有未初始化的记忆。使用
UndirectedGraphNode* node1 = new UndirectedGraphNode(0);
代替。
然后你也可以删除
行node1->label = 0;