0
// 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 个字节在 0x4A07152 的 1 的丢失记录 1 中肯定丢失:operator new[](unsigned long) (vg_replace_malloc.c:363) by 0x400DBE: ArrayIntVector::ArrayIntVector(int) (IntVector.cpp:12) by 0x401142: 主要 (lab09.cpp:8)

4

1 回答 1

3

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

于 2013-11-14T20:49:47.920 回答