0

我正在为几周后开始的面向对象课程做准备,但是我在解除分配内存的概念上遇到了麻烦。现在我只是将内存分配给堆栈的第一个节点,然后尝试释放它。如果有人可以帮助我找到我的析构函数做错了什么,将不胜感激。提前致谢!

我从 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 版

4

0 回答 0