在指针的STD向量上调用resize会崩溃

calling resize on std vector of pointers crashed

本文关键字:调用 resize 崩溃 向量 指针 STD      更新时间:2023-10-16

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

malloc不创建对象。它只是分配内存。要创建对象(至少是非普通对象),需要调用构造函数。new是这样,malloc不是。您的程序崩溃是因为您将malloc分配的内存视为那里有对象,而实际上没有。

使用

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

您有未初始化的内存。使用

UndirectedGraphNode* node1 = new  UndirectedGraphNode(0);

然后你也可以删除

node1->label = 0;