调用std矢量指针的调整大小崩溃

时间:2014-05-27 21:21:00

标签: c++ stl

使用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;
}

2 个答案:

答案 0 :(得分:6)

malloc不会创建对象。它只是分配内存。要创建对象(至少是非平凡的对象),您需要调用构造函数。 new这样做,malloc没有。您的程序崩溃是因为您正在处理由malloc分配的内存,就好像那里有一个对象,如果没有。

答案 1 :(得分:3)

使用时

UndirectedGraphNode* node1 = (UndirectedGraphNode*)malloc(sizeof(UndirectedGraphNode));

你有未初始化的记忆。使用

UndirectedGraphNode* node1 = new  UndirectedGraphNode(0);

代替。

然后你也可以删除

node1->label = 0;