C++ Erreur' : free(): pointeur non valide

J'ai lu à travers des problèmes similaires, mais je ne peux pas trouver quelque chose qui traite spécifiquement de mon problème (ou je n'ai tout simplement pas comprendre les autres solutions)

Je suis en train de mettre en œuvre un modèle de classe Stack, et je rencontre un problème lorsque vous essayez de faire un push sur la pile. voici mon 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() est appelée à partir d'une fonction dans le gestionnaire de classe:

void Manager::testPush(){
    Stack<int> test;
    int number = 3;
    test.push(3);
}

Lorsque j'exécute le code et les gestionnaires d'appel de testPush() la méthode, j'obtiens le résultat suivant imprimé:

if working
success
*** Error in `./assignment': free(): invalid pointer: 0x0000000000f11078 ***
[1]    14976 abort (core dumped)  ./assignment

Je ne suis pas sûr de ce que free() signifie, et ce qui pourrait éventuellement être la cause de cette erreur/abandonner

Lors de la fixation de cela, demandez-vous pourquoi vous avez un if-else dans push en premier lieu. Vous n'en avez pas besoin. quelque Chose comme ceci de travail, et résoudre votre problème tout en le faisant.
J'ai juste essayé votre code, et il me donne la même erreur que ci-dessus
je prie de différer. Si ce code défauts, alors votre faire autre chose de mal dans votre programme. Le lien ici ne laisse pas de doute, il fait exactement ce qu'il devrait.
Ah! my bad, je suis désolé, j'ai essayé la mise en place et il fonctionne... je met le nœud de la classe dans un fichier différent. Est-il préférable de mettre le nœud comme une structure dans le fichier d'en-tête, ou comme une classe comme une autre nœud?
il appartient dans un en-tête, peu importe (c'est un modèle, après tout). Si elle est intégrale avec Stack<T> comme une classe imbriquée ou stand-alone est finalement à vous.

OriginalL'auteur Vaderico | 2015-05-26