C 内存泄漏错误在实现堆栈类时

C++ Memory leak error when implementing Stack class

本文关键字:堆栈 实现 内存 泄漏 错误      更新时间:2023-10-16

i正在实现堆栈类,当我尝试调用push()时,我收到了一个内存泄漏错误(Double Free或Doufferion(FastTop))。这是我的代码:

#include "StackNode.h"
#include "Stack.h"
#include <iostream>
using namespace std;
Stack::Stack(){
  curr = NULL;   
}
Stack::~Stack(){
  while(!empty())
    pop();
  delete curr;
}
bool Stack::empty(){
  return curr==NULL;
}
int Stack::top(){
  return curr->value;
}
void Stack::push(int a){
  StackNode * temp = new StackNode;
  temp->value = a;
  if (!empty())        // atleast 1 element
  temp->prev = curr;   // temp links to current
   curr = temp;        // current becomes temp
}
void Stack::pop(){
  if (!empty()){
  StackNode * temp = curr;
  curr->prev = curr;
  delete temp;
  }
}

我调试并将其追溯到:

   temp = curr;

我看不到实现push()方法的任何其他方法。我的stackNode仅包含一个默认构造函数,该构造器将指针 Prev 设置为 null 。任何帮助,将不胜感激。谢谢!

编辑:这是我的stacknode:

#include "StackNode.h"
#include <iostream>
using namespace std;
StackNode::StackNode(){
   prev = NULL;
}

这是我的主要:

#include <iostream>
#include "Stack.h"
using namespace std;
int main(){
  //  Stack s;
    s.push(1);
  // cout<<s.top()<<endl;
  cout<<"pass"<<endl;
  return 0;
}

我有三个问题。

  1. stack :: pop

    void Stack::pop(){
        if (!empty()){
        StackNode * temp = curr;
        curr->prev = curr;         // curr = curr->prev ?
        delete temp;
      }
    }
    
  2. stack ::〜stack

    Stack::~Stack(){
      while(!empty())
        pop();
      delete curr;                 // Why delete curr here?
    }
    
  3. stack :: push

    void Stack::push(int a){
      StackNode * temp = new StackNode;
      temp->value = a;             // temp->prev assign NULL ?
      if (!empty())
        temp->prev = curr;
        curr = temp;
    }