C++ Fehler in '' : free(): invalid pointer
Habe ich gelesen über ähnliche Probleme, aber ich kann nichts finden, die speziell für Adressen mein problem (oder ich habe Sie einfach nicht verstehen, die anderen Lösungen)
Ich versuche zu implementieren Sie eine template-Stack-Klasse und habe ein Problem bei dem Versuch, push auf den stack. hier ist meine Stack.cpp:
#ifndef _STACK_H
#define _STACK_H
#include <string>
#include <stdio.h>
#include "Node.cpp"
template<typename T>
class Stack{
private:
Node<T>* mHead;
public:
Stack();
~Stack();
void push(T data);
};
template<typename T>
Stack<T>::Stack(){
mHead = NULL;
}
template<typename T>
Stack<T>::~Stack(){
delete mHead;
}
template<typename T>
void Stack<T>::push(T data){ //<-- having trouble with this method
Node<T>* temp = new Node<T>;
temp->data = data;
//if head is already empty, just create 1 Node
if(mHead==NULL){
printf("if working\n");
mHead = temp;
}else{
printf("else working\n");
//rearrange Nodes
temp->next = mHead;
mHead = temp;
}
printf("success\n");
}
#endif
push() aufgerufen wird, wird von einer Funktion in die Klasse manager Klasse:
void Manager::testPush(){
Stack<int> test;
int number = 3;
test.push(3);
}
Wenn ich den code ausführen und Anruf-Manager testPush () - Methode, bekomme ich die folgende gedruckt:
if working
success
*** Error in `./assignment': free(): invalid pointer: 0x0000000000f11078 ***
[1] 14976 abort (core dumped) ./assignment
Ich bin mir nicht sicher, was "free ()" bedeutet, und was könnte möglicherweise die Ursache dieser Fehler/Abbruch
Während dies zu beheben, betrachten Sie, warum Sie eine if-else in
Ich habe gerade versucht deinen code, und es gibt mir die gleiche Fehlermeldung wie oben
I beg to differ. Wenn dieser code Fehler, dann ist Ihr etwas anderes falsch in Ihrem Programm. Der link hier hinterlässt keinen Zweifel, es tut genau das was es soll.
Ah! meine schlecht, ich bin traurig, ich habe versucht, Ihre Umsetzung und es funktioniert... ich war putting die Knoten-Klasse in einer anderen Datei. Ist es besser die Praxis um zu setzen, den Knoten als struct in header-Datei, oder als eine Klasse als separate Knoten?
es gehört in eine header-unabhängig (es ist eine Vorlage, nachdem alle). Ob es integral mit
push
in den ersten Platz. Sie brauchen es nicht. Sowas arbeiten, und Ihr problem lösen, während dies zu tun.Ich habe gerade versucht deinen code, und es gibt mir die gleiche Fehlermeldung wie oben
I beg to differ. Wenn dieser code Fehler, dann ist Ihr etwas anderes falsch in Ihrem Programm. Der link hier hinterlässt keinen Zweifel, es tut genau das was es soll.
Ah! meine schlecht, ich bin traurig, ich habe versucht, Ihre Umsetzung und es funktioniert... ich war putting die Knoten-Klasse in einer anderen Datei. Ist es besser die Praxis um zu setzen, den Knoten als struct in header-Datei, oder als eine Klasse als separate Knoten?
es gehört in eine header-unabhängig (es ist eine Vorlage, nachdem alle). Ob es integral mit
Stack<T>
als geschachtelte Klasse oder stand-alone ist letztlich Ihnen überlassen.InformationsquelleAutor Vaderico | 2015-05-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, dass Sie vergessen haben setzen von data-Mitglied neben NULL in Knoten, temp.
Wenn die Klasse Knoten mit einem Konstruktor mit zwei Parametern, oder, wenn es ein Aggregat, dass Sie schreiben könnten einfacher
Berücksichtigen, dass der Destruktor der Klasse Knoten löschen müssen alle Knoten im stack.
Diese Funktion
sieht auch fragwürdig, weil test ist eine lokale variable der Funktion. Der stack kann nur verwendet werden, innerhalb der Funktion.
Sie erhält einen neuen Knoten temp " und " set mHead zu temp. So, jetzt mHead->next hat einige inderterminate Wert. Dies gilt nur, sofern der Konstruktor der Knoten<T> nicht das Feld selbst.
InformationsquelleAutor Vlad from Moscow