Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    14

    [c++] Memoria non poteva essere Written ! Aiuto

    Salve a tutti, ho realizzato la struttura dati Coda con i puntatori. Però quando vado a testare il programma la compilazione va bene ma quando lo eseguo ci deve essere qualche errore di logica che non riesco a capire perchè il programma si blocca, mi compare una finestra di windows che mi dice:
    L'istruzione a "0x00410bb0" ha fatto riferimento alla memoria a "0x77c0b814". La memoria non poteva essere "written".
    Fare clic su ok per terminare l'applicazione
    fare clic su annulla per eseguire il debug dell'applicazione

    vi posto il codice che ho scritto:
    codice:
    #ifndef _codap_h
    #define _codap_h
    #include <iostream>
    using namespace std;
    
    //cella generica
    template <class Tipo>
    struct cella{
           Tipo info;
           cella<Tipo> *succ;
    };
    //la Coda è formata da 2 puntatori di tipo cella uno all'inizio della coda e uno alla fine
    template <class Tipo>
    struct codap{
           cella<Tipo> *inizio;
           cella<Tipo> *fine;
    };
    
    //La Coda:
    template <class Tipo>
    class Coda
    {
          public:
                 Coda();//costruttore
                 ~Coda();//distruttore
                 //operatori della Coda
                 void creaCoda();
                 bool codaVuota();
                 Tipo leggiCoda();
                 void inCoda(Tipo);
                 void fuoriCoda();
                 bool appartiene(Tipo); //operatore aggiunto
          private:
                  codap<Tipo> *coda;
    };
    
    //costruttre
    template <class Tipo>
    Coda<Tipo>::Coda()
    {
         creaCoda();
    }
    
    //distruttore
    template <class Tipo>
    Coda<Tipo>::~Coda()
    {
         if(!codaVuota())
         {
              cella<Tipo> *tmp = coda->inizio;
              while(tmp!= NULL)
              {
                   cella<Tipo> *tmp1= tmp->succ;
                   delete(tmp);
                   tmp=tmp1;
              }
         }
    }
    
    //Creacoda crea una nuova coda vuota
    template <class Tipo>
    void Coda<Tipo>::creaCoda()
    {
         coda->inizio = NULL;
    }
    
    //indica se una coda è vuota
    template <class Tipo>
    bool Coda<Tipo>::codaVuota()
    {
         return (coda->inizio == NULL);
    }
    
    //leggiCoda legge il contenuto di una cella
    template <class Tipo>
    Tipo Coda<Tipo>::leggiCoda()
    {
         if(!codaVuota())
            return (coda->inizio->info);
         else
            cout<<"ERRORE: leggiCoda() a coda vuota!"<<endl;
    }
    
    //inCoda inserisce un nuovo elemento alla fine della codaù
    template <class Tipo>
    void Coda<Tipo>::inCoda(Tipo e)
    {
         if (codaVuota())
         {
            coda->inizio = coda->fine = new cella<Tipo>;
         }
         else
         {
              coda->fine->succ = new cella<Tipo>;
              coda->fine = coda->fine->succ;
         }
         coda->fine->info = e;
         coda->fine->succ = NULL;
    }
    
    //fuoriCoda elimina l'elemento in cima alla coda
    template <class Tipo>
    void Coda<Tipo>::fuoriCoda()
    {
         if(!codaVuota())
         {
            cella<Tipo> *tmp = coda->inizio;
            coda->inizio = coda->inizio->succ;
            delete (tmp);
         }else
            cout<<"ERRORE: fuoriCoda() a coda vuota!"<<endl;
    }
    
    //la funzione appartiene indica se un elemento si trova nella coda
    template <class Tipo>
    bool Coda<Tipo>::appartiene(Tipo e)
    {
         bool ret = false;
         cella<Tipo> *tmp = coda->inizio;
         while((tmp != NULL)&& (!ret))
         {
            if (tmp->info == e)
               ret = true;
            else
               tmp = tmp->succ;
         }
         return ret;
    }
    
    #endif
    e il relatico main
    codice:
    #include "Coda.h"
    #include <iostream>
    
    using namespace std;     
    
    //main
    int main()
    {
        Coda<int> c;
        
        c.inCoda(1);
        c.inCoda(2);
        c.inCoda(3);
        c.inCoda(4);
        
        cout<<"Stampo una Coda generica:\n"<<endl;
        while(!c.codaVuota())
        {
            cout<<c.leggiCoda()<<endl;
            c.fuoriCoda();
        }
            
            
        system("PAUSE");
        return 0;
        
    }
    mi dite come mai mi da questo problema???
    Grazie in anticipo a tutti e ciao
    " Meglio bruciare velocemente che ardere lentamente " K.D.Cobain

  2. #2

    Re: [c++] Memoria non poteva essere Written ! Aiuto

    non riesci a "debuggare"?

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    L'errore viene generato in partenza da

    coda->inizio = NULL;

    in quanto

    coda

    e' un puntatore il cui spazio non e' stato mai allocato.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    14
    lo fa anche se metto:
    coda->inizio = new (cella<Tipo>);
    coda->inizio = NULL;

    boo non riesco a capire!
    " Meglio bruciare velocemente che ardere lentamente " K.D.Cobain

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma cosa c'entra?

    E' lo spazio per

    coda

    che non esiste !
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    14
    Grazie mille Oregon, non avevo fatto caso al puntatore più importante, cioè quello che implementa realmente la coda! che stupido!Ora funziona alla grande!
    GRAZIE MILLE ancora e ciao a tutti
    " Meglio bruciare velocemente che ardere lentamente " K.D.Cobain

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 © 2024 vBulletin Solutions, Inc. All rights reserved.