+ Rispondi
Risultati da 1 a 2 di 2

Discussione: In debug funziona ma in esecuzione no...

  1. #1
    Nuovo della community
    reputazione complessiva: 1 1

    Messaggi
    4

    In debug funziona ma in esecuzione no...

    Salve ho creato un programma sulle liste, che presa in input una lista di interi aggiunge in coda alla lista un nuovo elemento con valore nel campo val pari alla somma dei valori degli ultimi 2 elementi della lista.

    Il programma a parer mio è corretto, ma nn capisco perchè se lo faccio partire in debug questo funziona invece con il normale esegui nn va. Uso il programma dev-c++ versione 4.9.9.2.
    Vi posto anche il codice del programma help
    Codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #define max 3
    
    typedef struct elem {
            int val;
            struct elem *next;
            } elem, *list;
            
    void fiblist(list l)
    {
         printf("Entro nella funzione \n");
         elem *new1=malloc (sizeof(elem));
         elem *first=l;
         elem *current=first;
         elem *prec=first;
         
         if (current==NULL)
            exit(1);
         else
            current=current->next;
         if (current==NULL)
           exit(1);
         else
         {
           current=current->next;
           prec=prec->next;
         }
         while (current->next!=NULL)
         {
             current=current->next;
             prec=prec->next;
         }
         new1->val=(current->val)+(prec->val);
         current->next=new1;
    }  
    
    
    int main()
    {
         elem *new2=malloc (sizeof(elem));
         elem *first=NULL;
         int i;
         for(i=0;i<max;i++)
         {
             new2=malloc (sizeof(elem));
             new2->next=first;
             first=new2;
         }
         elem *current=first;
         while(current!=NULL)
         {
            printf("Inserire il valore: \n");
            scanf("%d",&current->val);
            current=current->next;
         }  
         fiblist(first);
         current=first;
         printf("Esco dalla funzione\n");
         while(current->next!=NULL)
         {
            printf("%d ",current->val);
            current=current->next;
         }  
         current=first;
          while(current!=NULL)
         {
            current=current->next;
            free(first);
            first=current; 
         }                       
    getch();
    return 0;
    }
    Ultima modifica di bottomap; 21-01-2010 alle 15:20

  2. #2
    Moderatore Globale L'avatar di bottomap
    reputazione complessiva: 41 41

    Messaggi
    2,953
    Ciao,

    Ti invito ad incapsulare il codice negli appositi tag [code] e [/code] per agevolare la lettura e di conseguenza la probabilità di ottenere una risposta.

    Per quanto riguarda il problema in sé, in generale le differenze di comportamentro tra debug e release dipendono da un eccessiva confidenza con l'inizializzazione delle variabili e da puntatori che avrebbero dovuto essere null ed invece contengono valori spuri.

    Ad esempio, il new1 che inserisci in fondo alla lista nella funzione fblist non ha il valore next uguale a NULL per default... e' meglio non fare affidamento sul fatto che il compilatore lo azzeri al posto tuo.

    Al momento non ho possibilità di verificare il tuo codice... se ho un po'di tempo stasera gli do un'occhiata.

    Ciaociao


    Venite a farmi un saluto su http://www.bottomap.com/

    - Come porre domande in modo intelligente
    - Hai mai dato un'occhiata al
    Regolamento del Forum? Se la risposta è no, sarebbe proprio l'ora di farlo...
    - Se un utente ti è stato d'aiuto usa il pulsante Commenta Intervento per aumentare la sua reputazione!

    "La violenza è l'ultimo rifugio degli incapaci" - I.Asimov
    (per chiunque se lo fosse mai chiesto, il nick Bottomap è volutamente sgrammaticato)

+ Rispondi

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi