我有一个类 Bar
,它的构造函数初始化一个类型为 Foo
的 std::vector
(另一个类)。
酒吧.cpp
Bar::Bar(int n) {
for(int i = 0; i < n; i++) {
Foo foo;
foo.somefunction(i);
vec.push_back(foo) //this should insert foo into the vector
}
}
酒吧.h
class Foo;
class Bar {
std::vector<Foo> vec;
};
当我调试时,构造的第一次迭代工作正常。 foo
已创建,foo.somefunction()
运行良好,foo
被压入 vec
。
第二次交互似乎也能正常工作,但程序在返回开始第三次迭代时崩溃。
我收到 _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
错误和 HEAP CORRUPTION DETECTED
。
Foo
是一个包含动态创建数组的类,没什么特别的。
像这样:
Foo::Foo() {
solution = new float[size];
// some function that initializes the elements of solution
}
和一个常规析构函数 ~Foo() {delete [] solution;}
。我不认为问题来自 Foo
。
最佳答案
很可能您没有正确实现复制构造函数
和operator =
,并且您正在双重删除解决方案
。如前所述,您还应该阅读 The Rule of Three .
C++ 标准容器 store copies因此,当您执行 push_back
时,您正在制作拷贝。
关于c++ - 内存泄漏, vector push_back c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15392248/