Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    24

    Spiegazione comportamento lista

    Vorrei una spiegazione sul perché scrivere in questo modo è equivalente:
    (Ad esempio ho una lista di tipo lista con il campo nome)
    lista **ptr;
    ptr[0]->nome="aldo";
    (*ptr)->nome="aldo";

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perché (*ptr) è un puntatore equivalente al primo elemento del vettore ptr ...

    Cosa non ti è chiaro?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    24
    A questo punto non mi è charo il motivo per cui il professore di programmazione c mi abbia messo 18 motivandomi questo assegnamento ptr[0] come errore grave in quanto lui dice che non é un array di puntatori ...grazie comunque.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mah ... detto così non è chiaro, ma bisogna capire tutto il contesto e vedere tutto il codice ... (compresa l'allocazione della memoria ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    24
    Praticamente erano 4 funzioni e questa dove gli unici errori erano appunto questo tipo di assegnamento. Il codice é questo
    codice:
    void leggi_file(FILE *input,scrittore **testa)
    {    int count=0,numero=0;
         char cognome[20],nome[20];
         scrittore *tail;
         *testa=NULL;
         while(fscanf(input,"%s%s%d",cognome,nome,&numero)>0)
         {printf("a\n");
                                                            if(*testa==NULL)
                                                             {
                                                                             testa[0]=(scrittore *)malloc(sizeof(scrittore));
                                                                             strcpy(testa[0]->cognome,cognome);
                                                                             strcpy(testa[0]->nome,nome);
                                                                             testa[0]->id=count;
                                                                             testa[0]->num_rom=numero;
                                                                             count++;
                                                                             tail=*testa;
                                                             }
                                                             else
                                                             {
                                                                 tail->successivo=malloc(sizeof(scrittore));
                                                                 tail=tail->successivo;
                                                                 strcpy(tail->cognome,cognome);
                                                                 strcpy(tail->nome,nome);
                                                                 tail->id=count;
                                                                 tail->num_rom=numero;
                                                                 count++;
                                                             }
         }
         tail->successivo=NULL;
         }

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    testa prima della chiamata della funzione, è stato allocato ?
    Perchè se non è stato allocato è questo l' errore.

    codice:
    testa=(scrittore**)malloc(sizeof(scrittore*));

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    24
    perchè dovrei allocarlo più di una volta?

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da Hr90uB
    perchè dovrei allocarlo più di una volta?
    Così non lo allochi più di una volta
    testa è un puntatore a puntatore.
    Ma ogni singolo puntatore dell' array di puntatori testa, va allocato. Una volta allocato, testa[0] è il primo elemento dell' array di puntatori.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    24
    No dico, visto che nella funzione l'ho già allocato una volta con
    codice:
    *testa=(scrittore *)malloc(sizeof(scrittore*));
    comunque mi sono fatto dare la traccia e come pensavo io (logicamente parlando)
    o testa[0] oppure *testa il programma produce lo stesso effetto. Ho chiesto un incontro con il prof. per parlarne. Capirò meglio la sua opinione poi se volete vi faccio sapere

  10. #10
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da Hr90uB
    No dico, visto che nella funzione l'ho già allocato una volta con
    codice:
    *testa=(scrittore *)malloc(sizeof(scrittore));
    NO, è *testa che non punta a un' area di memoria allocata.
    Stai allocando memoria tramite il puntatore *testa, ma è proprio questo puntatore che prima di poter essere usato, va allocato.Capito ?

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.