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

    [C] Problemi vari con liste

    ciao a tutti, ho una serie di dubbi/perplessità/difficoltà con l'impiego delle liste in C che sarei grato se qualcuno mi aiutasse a risolvere.

    Andiamo per gradi
    io ho questa funzione
    codice:
    void stampa_films()
    {
    	MOVIE *i;
    	i = testaV;
    	if (i != NULL)
    	{
    		while (i != NULL)
    		{
    			printf("");
    			i=i->next;
    		}
    		return;
    	}
    	else
    	{
    		printf("Non è stato ancora inserito alcun articolo per questa tipologia\n");
    		return;
    	}
    }
    che dovrebbe stampare i dati contenuti nella struttura MOVIE.
    Dopo aver inserito almeno un dato (inserire il secondo mi dà problemi quindi ne riparliamo dopo ), provo a far visualizzare quanto c'è in memoria: ebbene, mi restituisce "Segmentation Fault".

    Sto lavorando su MacOSX e gcc, qualcuno saprebbe aiutarmi?


    ratatuia

  2. #2
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    forse il problema nn è tanto nella stampa quanto nella funzione che crea un nuovo elemento e lo aggancia alla lista
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  3. #3

    Re: [C] Problemi vari con liste

    Originariamente inviato da Ratatuia
    codice:
    void stampa_films()
    {
    	MOVIE *i;
    	i = testaV;
    	if (i != NULL)
    	{
    		while (i != NULL)
    		{
    			printf("");
    			i=i->next;
    		}
    		return;
    	}
    	else
    	{
    		printf("Non è stato ancora inserito alcun articolo per questa tipologia\n");
    		return;
    	}
    }
    Allora, tre precisazioni:
    1. testaV è una variabile globale spero, oppure se è locale devi passare un puntatore come paramento o fare un return dell'oggetto...
    2. la printf("") del ciclo while deve avere qualcosa da mandare a video, così è inutile...
    3. la return, dopo il while, deve avere qualcosa se ritorna, ad esempio "return 0;"...
    .: Teju.it - Una vita da raccontare
    .: 8s8.it - Wordpress gratis per tutti
    .: Vado.li - Accorcia URL

  4. #4
    la funzione che aggiunge alla fine della lista è questa

    codice:
    /* Aggiunge un nodo di tipo MOVIE alla fine della lista*/
    void inserisci_vhs(MOVIE **testaV, char *titolo, char *regista, char *genere, char *distribuzione)
    {
    	MOVIE* nuovo_vhs = (MOVIE *) malloc(sizeof(MOVIE));
    	MOVIE* i;
    	
    	strcpy(nuovo_vhs->titolo,titolo);
    	strcpy(nuovo_vhs->regista,regista);
    	strcpy(nuovo_vhs->genere,genere);
    	strcpy(nuovo_vhs->distribuzione,distribuzione);
    	nuovo_vhs->next = NULL;
    	
    	if (*testaV == NULL)
    	{
    		*testaV = nuovo_vhs;
    		return;
    	} else
    	{
    		for (i = *testaV; i->next != NULL; i=i->next)
    			;
    		i->next = nuovo_vhs;
    		return;
    	}
    }

  5. #5

    Re: Re: [C] Problemi vari con liste

    Originariamente inviato da teju
    Allora, tre precisazioni:
    1. testaV è una variabile globale spero, oppure se è locale devi passare un puntatore come paramento o fare un return dell'oggetto...
    2. la printf("") del ciclo while deve avere qualcosa da mandare a video, così è inutile...
    3. la return, sempre dentro il while, deve avere qualcosa se ritorna, ad esempio "return 0;"...
    1. sì sì, sono 4 variabili globali (una per ogni tipo di struttura)

    2. ho postato per sbaglio una funzione ancora incompleta

    nel printf ci sarebbe
    codice:
    printf("%s\t%s\t%s\t%s\t%s",i->autore,i->titolo,i->edizione,i->genere);
    3. ma se ho messo void perchè devo far tornare qlc?

  6. #6
    Originariamente inviato da Ratatuia
    codice:
    		for (i = *testaV; i->next != NULL; i=i->next)
    			;
    		i->next = nuovo_vhs;
    		return;
    Il ";" che c'è è un errore di battitura o esiste davvero? Perchè credo che quel ";" faccia sì che dentro al ciclo for non esegua nessuna operazione e poi, terminato il ciclo, faccia l'assegnazione
    i->next = nuovo_vhs;

    Dunque credo che così facendo inserisca solo il primo nodo e ogni volta lo sovrascrive...
    .: Teju.it - Una vita da raccontare
    .: 8s8.it - Wordpress gratis per tutti
    .: Vado.li - Accorcia URL

  7. #7

    Re: Re: Re: [C] Problemi vari con liste

    Originariamente inviato da Ratatuia 3. ma se ho messo void perchè devo far tornare qlc?
    Mah, che io sappia o si metto void e nessun "return", piuttosto la "break", oppure si metta int alla funzione e "return 0"...
    .: Teju.it - Una vita da raccontare
    .: 8s8.it - Wordpress gratis per tutti
    .: Vado.li - Accorcia URL

  8. #8
    Originariamente inviato da teju
    Il ";" che c'è è un errore di battitura o esiste davvero? Perchè credo che quel ";" faccia sì che dentro al ciclo for non esegua nessuna operazione e poi, terminato il ciclo, faccia l'assegnazione
    i->next = nuovo_vhs;

    Dunque credo che così facendo inserisca solo il primo nodo e ogni volta lo sovrascrive...

    esiste davvero
    pensa che quella parte di codice l'ho presa paro paro dal mio prof di info I

    un mio amico ha provato anche con questa
    codice:
    i = *testaL;
    		while( i != NULL ) 
    		{
    			i = i->next;
    		}
    		i->next = nuovo_libro;

  9. #9
    Originariamente inviato da teju
    Il ";" che c'è è un errore di battitura o esiste davvero?
    Ok, basta, ho detto una cavolata assurda, ho capito dopo cosa fai!
    .: Teju.it - Una vita da raccontare
    .: 8s8.it - Wordpress gratis per tutti
    .: Vado.li - Accorcia URL

  10. #10
    Originariamente inviato da teju
    Ok, basta, ho detto una cavolata assurda, ho capito dopo cosa fai!

    ok

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.