I was implementing a Stack class and when I tried to call push(), I received a memory leak error (double free or corruption(fasttop)). Here is my code:
#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;
}
}
I debugged and traced it to:
temp = curr;
I cannot see any other way of implementing the push() method. My StackNode only contains a default constructor which sets the pointer prev to NULL . Any help would be appreciated. Thanks!
Edit: Here is my StackNode:
#include "StackNode.h"
#include <iostream>
using namespace std;
StackNode::StackNode(){
prev = NULL;
}
And here is my main:
#include <iostream>
#include "Stack.h"
using namespace std;
int main(){
// Stack s;
s.push(1);
// cout<<s.top()<<endl;
cout<<"pass"<<endl;
return 0;
}
I have three questions.
Stack::pop
void Stack::pop(){ if (!empty()){ StackNode * temp = curr; curr->prev = curr; // curr = curr->prev ? delete temp; } }
Stack::~Stack
Stack::~Stack(){ while(!empty()) pop(); delete curr; // Why delete curr here? }
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; }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.