Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    [c++]Classe per gestire una pila

    Ho creato una classe per gestire una pila con operazioni di inserimento in coda, cancellazione di un elemento,ecc... per ora ho definito solo le funzioni di stampa e di inserimento, ma già ho un problema.Se eseguo il codice mi da segmentation fault, il debugger mi dice la riga dove si verifica ma non capisco il perchè.
    La riga di codice l' ho indicata nella riga con gli asterischi.
    codice:
    using namespace std;
    
    
    // gestione di una pila con aggiunta degli elementi in testa, coda, cancellazione degli elementi e ordinamento tramite una classe
    
    class Stack
    {
        public:
        Stack();
        void Add();
        void Sort();
        void Delete();
        void Print();
        private:
        int x;
        Stack *next;
    };
    
    
    
    Stack::Stack()
    {
        x=0;
        next=NULL;
    }
    
    void Stack::Add(void)
    {
        Stack *pointer;
        pointer=next;
        if(pointer==NULL)
            cout << "ok";
        while(pointer!=NULL)
            pointer=pointer->next;
        pointer->next=new Stack;      ******* Qua avviene il segmentation fault ****
    }
    
    void Stack::Print(void)
    {
        Stack *pointer;
        pointer=next;
        cout << pointer->x << endl;
        while(pointer->next !=NULL)
        {
            pointer=pointer->next;
            cout << pointer->x << endl;
        }
    }
    
    int main (int argc, const char **argv)
    {
        Stack a;
        a.Add();
        return 0;
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156

    Re: [c++]Classe per gestire una pila

    codice:
        while(pointer!=NULL)
            pointer=pointer->next;
        pointer->next=new Stack;      ******* Qua avviene il segmentation fault ****
    Decisamente normale. quando esci dal while pointer è NULL, quindi, quando tenti di fare pointer->next, dereferenzi NULL.

  3. #3
    Come condizione di uscita nel while devi mettere pointer->next != NULL, così sei sicuro di essere all'ultimo elemento (NULL è "oltre" l'ultimo)...
    Se state chiamando per i piedini mancanti,lasciate il vostro indirizzo,e i piedi di ricambio vi saranno consegnati da mio nipote Jody. E ora, io devo ritornare nel dolce abbraccio della cripta... Ma tornerò!!!

    The Simpson ; AABF08 (Domenica orrenda domenica)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.