Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [c] puntatori e riferimenti

    salve a tutti, la mia richiesta è semplice e non so se veloce da risolvere.
    non capisco perché questo codice mi dà in esecuzione errore di segmentazione, l'errore sono quasi sicuro che stia nel while di decToEsL però non riesco a risolverlo. mi aiutate? siete la mia ultima spiaggia.
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    struct _listchar{
    	char info;
    	struct _listchar *next;
    };
    
    typedef struct _listchar* Listchar;
    
    void stampa(Listchar *l){
    	if (*l)
    		while (*l){
    			printf("%c ",(*l)->info);
    			(*l)= (*l)-> next;
    		}
    	else
    		printf ("lista vuota");
    }
    
    void decToEsL (int a, Listchar *l){
    	Listchar *temp;
    	temp=malloc(sizeof(Listchar));
    	char dict[]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    	if (a)
    		while (a){
    			(*temp)->info = dict [a%16];
    			(*temp)->next=*l;
    			*l=*temp;
    			a=a/16;
    		}
    	else{
    		(*temp)->info = '0';
    		(*temp)->next = NULL;
    		*l=*temp;
    	}
    }
    
    int main(){
    	Listchar l;
    	l=malloc(sizeof(Listchar));
    	decToEsL(64,&l);
        stampa(&l);
    	return 0;
    }
    ah, e grazie.
    quasi dimenticavo, se il codice non fosse chiaro, devo creare una lista dove ogni elemento è una cifra della conversione esadecimale di un intero a

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Hai fatto un po' di debugging ? Hai impostato qualche breakpoint per eseguire linea per linea ed individuare la linea e il momento in cui avviene l'errore ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    su dev-c++ mi dà l'errore in debug su
    (*temp)->info = dict [a%16];
    non appena entra nel while

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quindi c'è subito qualcosa che non va in

    (*temp)

    Se ci fai maggiore attenzione tu non hai mai allocato lo spazio per la struttura ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    ok, ho fatto
    codice:
    void decToEsL (int a, Listchar *l){
    	Listchar temp;
    	temp=malloc(sizeof(Listchar));
    	char dict[]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    	if (a)
    		while (a){
    			temp->info = dict [a%16];
    			temp->next=*l;
    			*l=temp;
    			a=a/16;
    		}
    	else{
    		temp->info = '0';
    		temp->next = NULL;
    		*l=temp;
    	}
    }
    ora il problema è che ad ogni ciclo non creo un nuovo elemento di temp, ma modifico solamente info e il next punta a se stesso giusto?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... no ...

    Chiediti cosa sia Listchar ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    il no no è riferito al codice che ho scritto o a quello che ho scritto dopo?
    il tipo Listchar è un puntatore a struct _listchar no?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A quello che hai scritto dopo ...

    Se il Listchar è un puntatore quando allochi lo spazio della struttura? Non hai ancora risposto correttamente a questa domanda. Non allochi strutture.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    mmm allora, con questo codice mi funziona, però non ho ancora capito quello che intendi. magari funziona solo per un caso e sto continuando ancora a sbagliare.
    codice:
    void decToEsL (int a, Listchar *l){
    	Listchar temp;
    	char dict[]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    	if (a)
    		while (a){
    			temp=malloc(sizeof(Listchar));
    			temp->info = dict [a%16];
    			temp->next=*l;
    			*l=temp;
    			a=a/16;
    		}
    	else{
    		temp=malloc(sizeof(Listchar));
    		temp->info = '0';
    		temp->next = NULL;
    		*l=temp;
    	}
    }

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì ... è un caso ma è sbagliato.

    cosa intendi
    Mi sembra semplice quello che ti dico ... non hai allocato la struttura !
    Manca la malloc per la struttura ...
    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.