// 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字节已分配
在0x4A07152: operator newunsigned long (vg_replace_malloc.c:363) by 0x400DBE: ArrayIntVector::ArrayIntVector(int) (IntVector.cpp:12) by 0x401142: main (lab09.cpp:8)的1个块中的20个字节肯定会丢失。
发布于 2013-11-15 04:49:48
问题是你的析构函数不是虚拟的。将析构函数声明为virtual。
https://stackoverflow.com/questions/19988000
复制相似问题