可以使用 VS 2013 Express 重现该问题。当内部 vector 实现试图解除分配原始 vector 时,它崩溃了。
但是,这个问题可以通过使用“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
分配的内存视为存在对象,而实际上并不存在。
关于c++ - 在指针的标准 vector 上调用调整大小崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23899160/