我正在为几周后开始的面向对象课程做准备,但是我在解除分配内存的概念上遇到了麻烦。现在我只是将内存分配给堆栈的第一个节点,然后尝试释放它。如果有人可以帮助我找到我的析构函数做错了什么,将不胜感激。提前致谢!
我从 valgrind memcheck 得到的输出是:
==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 课程。我仍然有类似的问题,但现在有两个内存泄漏(在 main 中对 AddNode 的两个调用)。
编辑:使用 C++ 6.3.0 版和 valgrind 3.13.0 版