Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211

    C++ code con puntatori

    ciao ragazzi, ho creato la classe coda con puntatori utilizzando anche la libreria standard assert.h, dopo di che ho creato un pezzo di codice per provare se la classe è stata creata correttamente ma alla chiamata del metodo fuoricoda() fallisce l'asserto quando questo non dovrebbe succedere. come mai??? posto i codici della classe e per la prova:

    codap.h
    codice:
    #ifndef _CODAP_H
    #define _CODAP_H
    
    #include <cstdlib>
    #include <iostream>
    #include <assert.h>
    
    using namespace std;
    
    typedef int tipoelem;
    
    class coda
    {
        private:
            struct node
            {
                struct node* precedente;
                tipoelem elemento;
                struct node* successivo;
            };
        public:
            typedef node* nodo;
            
            nodo testa;
            nodo fondo;          
            coda();
            bool codavuota();
            tipoelem leggicoda();
            void incoda(tipoelem);
            void fuoricoda();
    };
    
    coda::coda()
    {
        testa = NULL;
        fondo = NULL;
    }
    
    bool coda::codavuota()
    {
        return((testa == NULL) && (fondo == NULL));
    }
    
    tipoelem coda::leggicoda()
    {
        return(testa->elemento);
    }
    
    void coda::incoda(tipoelem elem)
    {
        nodo tmp = new node;
        tmp->elemento = elem;
        tmp->precedente = NULL;
        tmp->successivo = fondo;
        fondo = tmp;
    }
    
    void coda::fuoricoda()
    {
        assert((testa != NULL) && (fondo != NULL));
            nodo tmp = testa;
            if(testa == fondo)
            {
                testa = NULL;
                fondo = NULL;
            }
            else
            {
                testa = testa->precedente;
                testa->successivo = NULL;
            }
            delete tmp;
    }
    #endif
    provacoda.cpp
    codice:
    #include <cstdlib>
    #include <iostream>
    #include "codap.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        coda queue;
        
        queue.incoda(6);
        queue.incoda(3);
        queue.fuoricoda();
        queue.incoda(9);
        
        while(!queue.codavuota())
        {
            cout << queue.leggicoda() << "  ";
            queue.fuoricoda();
        }
        cout << "\n\n";
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }

  2. #2
    Utente di HTML.it L'avatar di sotoli
    Registrato dal
    Mar 2008
    Messaggi
    150
    Ciao....come prima impressione direi che nel costruttore inizializzi la variabile testa uguale a NULL e nella funzione incoda non ne modifiche il valore, per cui nella successiva chiamata alla funzione fuoricoda la condizione dell'asserzione è falsa perché testa = NULL.
    Crestron Control Systems and AMX Control Systems Programmer

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211
    grazie 1000, è questoil motivo del fallimento dell'asserzione.

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.