c++ - 在指针的标准 vector 上调用调整大小崩溃

标签 c++ stl

可以使用 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/

相关文章:

c++ - 从可变参数模板容器类中给定可变参数调用传入和传出方法

c++ - 如何将起始地址分配给 map<pair<long long int,long long int>,long long int > 的迭代器

c++ - WinAPI - 获取用于绘图的可滚动框架

c++ - 使用非常量函数参数初始化数组

c++ - 遍历 vector c++ 中的列表

c++ - 迭代标准容器中的所有元素对(C++)

c++ - Boost - unordered_set 教程/示例/任何东西?

c++ - 使用成员函数 top() 从 priority_queue 获取元素

c++ - 为什么 lock_guard 可以通过 unique_lock 得到一个已经锁定的互斥体?

c++ - 包装枚举集