Ich implementierte eine Stack-Klasse, und als ich versuchte, push() aufzurufen, erhalte ich einen Speicherleckfehler (doppelt frei oder Korruption (fasttop)). Hier ist mein Code:C++ Speicherleckfehler beim Implementieren der Stack-Klasse
#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;
}
}
ich gedebuggt und verfolgt sie:
temp = curr;
ich keine andere Art und Weise der Umsetzung der Methode push() sehen kann. Mein StackNode enthält nur einen Standardkonstruktor, der den Zeiger prev auf NULL setzt. Jede Hilfe wäre willkommen. Vielen Dank!
Edit: Hier ist mein StackNode:
#include "StackNode.h"
#include <iostream>
using namespace std;
StackNode::StackNode(){
prev = NULL;
}
Und hier mein Haupt ist:
#include <iostream>
#include "Stack.h"
using namespace std;
int main(){
// Stack s;
s.push(1);
// cout<<s.top()<<endl;
cout<<"pass"<<endl;
return 0;
}
Mit dem, was Sie Habe einen "doppelten freien Fehler" gezeigt, der mit einem einfachen 2- oder 3-Zeilen Programm verursacht werden kann. '{Stapel s; s.push (10); Stack s2 = s;} '. Lies dir die Regel von 3 durch. – PaulMcKenzie
Außerdem musst du dein 'main' Programm zeigen, nicht nur deine Klasse. Es ist, wie Sie die Klasse verwenden, die zählt, und wie ich gezeigt habe, ist es einfach, Ihre "Stack" -Klasse Probleme zu haben. – PaulMcKenzie
Nun, bis jetzt habe ich Main benutzt, um meine Klasse zu testen. Also ich habe nur: Stapel s; s.push (1); – user2999870