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

use*_*869 1 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;
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*ley 6

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

  • 实际上,在构造之前引用具有非平凡构造函数的对象的非静态成员会导致未定义的行为. (2认同)