c++ - 内存泄漏, vector push_back c++

标签 c++ memory vector memory-leaks heap-memory

我有一个类 Bar,它的构造函数初始化一个类型为 Foostd::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/

相关文章:

c++ - C++11 内存模型有什么好的解释?

c++ - 包括 windows.storage.streams.h

c++ - 扭曲的逻辑 : a global variable in one file refers to an extern variable but is also referred by that extern variable

iphone - 如何诊断EXC_CRASH?

r - 如何在 R 中划分一组值(向量)

c++ - 为项目构建大型库时的最佳实践

ios - 为什么@autoreleasepool 不起作用

c - memcpy 与 strcat

string - 如何通过静态方法在 clojure 中进行 comp ?

matlab - 如何识别 MATLAB 中向量中至少 10 个相邻 '1' 的第一次出现?