Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211

    C++ coda con priorità, metodo inserisci

    ciao sto implementando una coda con priorità utilizzando una realizzazione con lista ordinata di nodi. sto facnedo il metodo inserisci che prende un valore e una priorità, crea un nodo e lo mette nella posizione di competenza nella lista. il metodo che stro creando mi funziona per l'inserimento dei primi 2 nodi, poi quando ne metto un altro con priorità minore (la priorità maggiore si ha con un numero intero minore) il metodo va in crash ma non so qual'è l'istruzione che dà problemi. ho provato a fare il debug ma questo non parte.
    posto il codi del metodo, magari qualche anima buona mi aiuta a capire dove si trova l'istruzione errata.

    pricodalo.h
    codice:
    template<class tipoelem>
    void pricodalo<tipoelem>::inserisci(tipoelem elem)
    {
       cout << "inserire la priorita' da associare al valore " << elem << ": ";
       int priority;
       cin >> priority;
       
       if(this->pricodavuota())
       {
          pric = new nodopricoda<tipoelem>;
          pric->setelem(elem);
          pric->setpri(priority);
       }
       else
       {
          nodopricoda<tipoelem> *tmp = pric;
          bool trovato = false;
          while(!trovato && (tmp != NULL))
          {
             if(priority < tmp->getpri())
             {
                nodopricoda<tipoelem> tmp2;
                if(tmp == pric)
                {
                   tmp2.setsuc(tmp);
                   tmp->setprec(&tmp2);
                   pric = &tmp2;
                }
                else
                {
                   tmp2.setsuc(tmp);
                   tmp2.setprec(tmp->getprec());
                   (tmp->getprec())->setsuc(&tmp2);
                   tmp->setprec(&tmp2);
                }
                tmp2.setelem(elem);
                tmp2.setpri(priority);
                trovato = true;
             }
             else
                tmp = tmp->getsuc();
          }
          if(!trovato)
          {
             tmp = pric;
             while(tmp->getsuc() != NULL)
                tmp = tmp->getsuc();
                
             nodopricoda<tipoelem> tmp2;
             tmp->setsuc(&tmp2);
             tmp2.setprec(tmp);
             tmp2.setelem(elem);
             tmp2.setpri(priority);
          } 
       }
    }
    le stro provando tutte ma niente da fare.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma com'è che non riesci ad individuare la linea (o almeno il metodo) in cui avviene il problema?

    E' vero che le anime buone lo possono fare per te ma non sempre si ha tempo ...

    Non puoi fare uno sforzo per individuare la linea eseguendo passo passo il codice?

    Anche perché per farlo al posto tuo si dovrebbe avere *tutto* il codice con un main di prova e non solo il metodo in questione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211
    oregon non immagini quante volte sto eseguendo il codice passo passo e non immagini nemmeno le parolacce che sto dicendo avanti al computer per riuscire a trovare questa maledettissima linea di codice che non va.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da pietrol83
    oregon non immagini quante volte sto eseguendo il codice passo passo e non immagini nemmeno le parolacce che sto dicendo avanti al computer per riuscire a trovare questa maledettissima linea di codice che non va.
    Ti comprendo ... non so cosa usi ma quando eseguo passo passo del codice (uso Visual Studio), diciamo che la prima (o al massimo la seconda) volta che eseguo il codice mi faccio subito un'idea di dove sia il problema. Qualche minuto dopo lo individuo con precisione ... (sarà che non usi lo strumento giusto ...).

    Ovviamente a patto che non manchi nulla nel codice (ovvero che sia compilabile ed eseguibile) rispetto a quello che provi tu ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211
    oregon io sto preparando un esame e la prof vuole che usiamo esclusivamente il dev C++. come ho scritto sopra, ho provato a fare il debug ma non parte.
    ho provato a fare anche i disegnini su carta eseguento il codice una istruzione alla volta ma mi sembra che tutto va bene, invece il programma va in crash, ho provato a mettere un system("pause") prima di ogni istruzione ma niente da fare.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da pietrol83
    oregon io sto preparando un esame e la prof vuole che usiamo esclusivamente il dev C++. come ho scritto sopra, ho provato a fare il debug ma non parte.
    Ah ... ok ... questo è il problema dell'università italiana ... si vede che la prof. non ha mai provato a fare debugging con DevC++ ...

    Come ti dicevo, ti posso dare una mano, ma con tutto il codice che stai provando tu, completo e compilabile ... magari invia uno zip
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211
    questo è l'archivio contenente tutto il codice necessario.

    https://skydrive.live.com/redir.aspx...592&parid=root

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ho visto ... eseguendo in debugging passo passo, l'errore avviene in questo ciclo

    codice:
             while(tmp->getsuc() != NULL)
                tmp = tmp->getsuc();
    perché, ad un certo punto, il valore restituito da tmp->getsuc() e quindi assegnato nuovamente a tmp non è valido ma non è neanche NULL.

    Se ad un certo punto della catena si ha un puntatore non valido vuol dire che durante una inizializzazione di un nodo hai dimenticato di impostare a NULL i puntatori precedente e successivo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Accade anche quando si vogliono memorizzare puntatori a variabili stack based, dimenticando che una volta uscite dallo scope, tali variabili sono spazzatura.
    codice:
       nodopricoda<tipoelem> tmp2;
       tmp->setsuc(&tmp2);
    questo è il problema dell'università italiana ... si vede che la prof. non ha mai provato a fare debugging con DevC++ ...
    Il che mi conferma sempre più l'enorme divario tra l'università e il mondo reale.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da shodan
    Accade anche quando si vogliono memorizzare puntatori a variabili stack based, dimenticando che una volta uscite dallo scope, tali variabili sono spazzatura.
    Vero, ma in questo caso il debugger mi indica che il valore del puntatore è

    0xcccccccc

    che per Visual C++ è il valore impostato dal debugger per inizializzare il debugger. Quel valore indica che il puntatore non è mai stato scritto dal programma.

    codice:
       nodopricoda<tipoelem> tmp2;
       tmp->setsuc(&tmp2);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.