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 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

Schreibe einen Kommentar