Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Problema sulle liste

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    3

    Problema sulle liste

    Ciao! Devo creare una procedura che, data una lista di interi, elimini tutti i numeri dispari. Questo è quello che ho prodotto, ma quando compilo mi dice "Segmentation fault:11"
    Grazie
    codice:
    void Dis(Lista *lista){    
      Lista pre;
        Lista aux;
        aux=malloc(sizeof(Elemento));
         aux=*lista;
        
        while(((aux)->i)%2==1){              //in questo ciclo elimino tutti i numeri dispari iniziali
          Lista tmp2;
            tmp2=aux;
            
            if((tmp2->next->i)%2==1){
    	  aux=(aux)->next;
                free(tmp2);}
            else{
    	  
    	  (aux)=(aux)->next->next;
                pre=tmp2->next;
                free(tmp2);
            }
        }
        
        while(aux->next!=NULL){         //ora, dopo qualche numero pari elimino i restanti dispari
          if(((aux)->i)%2==1){
    	  Lista tmp;
                tmp=(aux);
                pre->next=pre->next->next;
                (aux)=(aux)->next;
                free(tmp);
    	    
            }
            else{
    	  (aux)=(aux)->next;
                pre=pre->next;
            }
        }
    }

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Avresti potuto anche postare un po' di contesto...
    In ogni caso nel tuo codice mancano dei controlli su alcuni casi NULL, il malloc all'inizio è inutile (ed anzi causa un memory leak), la logica è sovracomplicata...
    codice:
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct El {
        int i;
        struct El *next;
    } Elemento;
     
    typedef Elemento *Lista;
     
    void Dis(Lista *lista) {
      Lista tmp = *lista;
      Lista tmp1;
      while((tmp != NULL) && (tmp->i % 2 == 0)) {
        tmp1 = tmp;
        tmp = tmp->next;
        free(tmp1);
      }
      *lista = tmp;
      while(tmp) {
        if((tmp->next) && (tmp->next->i % 2 == 0)) {
          tmp1 = tmp->next;
          tmp->next = tmp->next->next;
          free(tmp1);
        }
        tmp = tmp->next;
      }
    }
     
    int main() {
        Lista l = NULL, tmp;
        int i;
        for(i = 9; i > 0; i--) {
            tmp = (Lista)malloc(sizeof(Elemento));
            tmp->next = l;
            tmp->i = i;
            l = tmp;
        }
        Dis(&l);
        while(l) {
            printf("%d,", l->i);
            tmp = l;
            l = l->next;
            free(tmp);
        }
        return 0;
    }
    Qui puoi vedere un esempio completo compreso, compreso il main usato per il test e, soprattutto, le strutture dati che vanno sempre postate
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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.