Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C] Liste dinamiche

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    7

    [C] Liste dinamiche

    Ciao! Ho un problemino con questo programma, praticamente dovrebbe creare una lista dinamica ed eliminare poi tutti i valori inferiori ad un certo numero che specifico dalla lista. Solo che va in crash quando raggiunge l'ultimo numero della lista Come mai?

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    void crealista();
    void visualizzalista();
    int eliminanumero(int dato);
    
    struct elenco {
       int numero;
       struct elenco *pun;
       };
    
    int i,n;
    struct elenco *p,*paux, *paux2;
    
    main()
    {
         int val,i;
    	
         crealista();
       
         printf("Quale e' il numero al di sotto del quale vuoi eliminare i numeri piu piccoli?:  ");
         scanf("%i",&val);
         while (i != 0) 
         {
    		i = eliminanumero(val);
         } 
         visualizzalista();
    	
    }
    
    void crealista()
    {
       printf("Inserisci la quantita' dei numeri da inserire: ");
       scanf("%i",&n);
    
       if (n==0)
          p = NULL;
       else
       {
          p = (struct elenco *)malloc(sizeof(struct elenco));
          printf("\nInserisci il valore: ");
          scanf("%i",&p->numero);
          paux = p;
          for (i=1;i<=n-1;i++)
          {
             paux->pun = (struct elenco *)malloc(sizeof(struct elenco));
             paux = paux->pun;
             printf("\nInserisci il valore: ");
                  scanf("%i",&paux->numero);
                  if (i==n-1)
                    paux->pun = NULL;
          }
       }
    }
    
    int eliminanumero(int dato)
    {
    	paux = p;
                while (paux != NULL)
    	    {
    		    if (paux == p && paux->numero < dato)
    		    {
    			    p = paux->pun;
    			    free(paux);
    			    return 1;
    		    }
    		    else if (paux->pun->numero < dato)
    		    {
    			    paux->pun = paux->pun->pun;
    			    paux2 = paux->pun;
    			    free(paux2);
    			    return 1;
    		    }
    		    paux = paux->pun;
    	    }
    	    return 0;
    } 
    void visualizzalista()
    {
       system("cls");
       paux = p;
       while (paux != NULL)
       { 
          printf("%i\n",paux->numero);
          paux = paux->pun;
       }
    }
    grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    117

    Re: [C] Liste dinamiche

    Originariamente inviato da trashie
    codice:
    	}
    	else if (paux->pun->numero < dato)
    	{
    Presupponete che paux->pun sia diverso da NULL, ma questo controllo non c'è, quindi quando arriva all'ultimo elemento cerca paux->pun->numero e ti dà errore perchè paux->pun è null!

    Dovresti risolvere con un:
    codice:
    }
    else if (paux->pun != NULL && paux->pun->numero < dato)
    {

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    7
    grazie mille, funziona

    l'avevo trovato anche io questo errore ma non funziona lo stesso, avevo scritto

    else if (paux->pun->numero < dato && paux->pun != NULL)

    cioè invertito l'ordine

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.