По-прежнему доступная выделенная память с использованием valgrind

Я готовлюсь к объектно-ориентированному классу, который начнется через несколько недель, но у меня возникли проблемы с концепцией освобождения памяти. Теперь я просто выделяю память первому узлу стека, а затем пытаюсь ее освободить. Если бы кто-нибудь мог помочь мне найти то, что я делаю не так с моим деструктором, это было бы очень признательно. Заранее спасибо!

Вывод, который я получаю от memcheck valgrind:

==13653== 8 bytes in 1 blocks are still reachable in loss record 1 of 1
==13653==    at 0x4847DA4: operator new(unsigned int) (vg_replace_malloc.c:328)
==13653==    by 0x10A2B: Stack::AddNode(int) (Stack.C:25)
==13653==    by 0x10923: main (Main.C:5)
==13653==
==13653== LEAK SUMMARY:
==13653==    definitely lost: 0 bytes in 0 blocks
==13653==    indirectly lost: 0 bytes in 0 blocks
==13653==      possibly lost: 0 bytes in 0 blocks
==13653==    still reachable: 8 bytes in 1 blocks
==13653==         suppressed: 0 bytes in 0 blocks

Код:

#include <iostream>

using namespace std;

class Stack {
private:

struct node{
int data;
node * prev;
};

node * stackptr;

public:

Stack() {
stackptr = nullptr;
}

~Stack() {
cout << "Calling destructor" << endl;
node * p1 = stackptr;
node * delptr = nullptr;

while(p1 != nullptr) {
delptr = p1;
p1 = p1->prev;
delptr->prev = nullptr;
cout << "Deleteing " << delptr->data << " from the stack" << endl;
delete delptr;
}
}

void AddNode(int data) {
node * n = new node;
n->data = data;

if(stackptr == nullptr) {
stackptr = n;
stackptr->prev = nullptr;
}
else {
n->prev = stackptr;
stackptr = n;
}
}
};

int main() {
Stack s;
s.AddNode(1);
s.AddNode(2);
return 0;
}

РЕДАКТИРОВАТЬ: я закончил мой класс AddNode. У меня все еще есть подобная проблема, но с двумя утечками памяти (два вызова AddNode в main).

РЕДАКТИРОВАТЬ: Использование C ++ версии 6.3.0 и valgrind версии 3.13.0

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]