在指针的STD向量上调用resize会崩溃
calling resize on std vector of pointers crashed
使用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;
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- vector.resize()中的分配错误
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- CMakeLists问题:在推力::device_vector上调用resize()时出现bad_alloc错误
- 为什么 FLTK 窗口在调用 resize() 后无法使用鼠标调整大小
- vector.resize()方法在调整大小时调用默认的元素构造函数
- 在指针的STD向量上调用resize会崩溃