C++析构函数使用动态内存泄漏

C++ destructor leaks with dynamic memory

本文关键字:内存 泄漏 动态 析构函数 C++      更新时间:2023-10-16
// Class
ArrayIntVector : IntVector{
private:
  int *data;
  int dataCapacity;
  int numElements;
  void check_invariants() const;
}
// Constructor
ArrayIntVector::ArrayIntVector(int initCapacity)
    : dataCapacity(initCapacity), numElements(0) {
    data = new int[dataCapacity];
    check_invariants();
}
// Destructor
ArrayIntVector::~ArrayIntVector() {
    check_invariants();
    delete[] data;
    data = 0;
}
int main(){
    IntVector *v = new ArrayIntVector(5);
    // testing class functions
    // push_back, pop_back, empty, index, grow
    delete v;
    return 0;
}

我正在泄漏。当我使用valgrind时,我得到以下结果:

堆摘要: 退出时使用:1 个块中 20 个字节 堆总使用量:7 个分配,7 个空闲,分配 1,284 字节

1

块中的 20 个字节肯定会丢失在丢失记录中 1 个,共 1 个 在0x4A07152:运算符 new[](无符号长整型) (vg_replace_malloc.c:363) 作者:0x400DBE: ArrayIntVector::ArrayIntVector(int) (IntVector.cpp:12) 按0x401142:主要 (Lab09.cpp:8)

问题是你的析构函数不是虚拟的。将析构函数声明为虚拟。