// 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, я получаю следующее:
СВОДКА КУЧИ: используется на выходе: 20 байтов в 1 блоке, общее использование кучи: 7 выделенных блоков, 7 освобождений, выделено 1284 байта
20 байтов в 1 блоке определенно теряются в записи потери 1 из 1 по адресу 0x4A07152: operator new [] (unsigned long) (vg_replace_malloc.c: 363) по 0x400DBE: ArrayIntVector :: ArrayIntVector (int) (IntVector.cpp: 12) по 0x401142: основной (lab09.cpp: 8)
data
в значение null после удаления в деструкторе. Когда деструктор выполняется,data
больше не существует. - person masoud   schedule 15.11.2013// do stuff
? - person   schedule 15.11.2013data
после уничтожения объекта? - person juanchopanza   schedule 15.11.2013data = 0
сбивает с толку valgrind? Это очень маловероятно, но если вы не разместите больше кода, трудно сказать, в чем проблема. - person sbabbi   schedule 15.11.2013