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";
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";
Perché (*ptr) è un puntatore equivalente al primo elemento del vettore ptr ...
Cosa non ti è chiaro?
No MP tecnici (non rispondo nemmeno!), usa il forum.
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.
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.
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; }
testa prima della chiamata della funzione, è stato allocato ?
Perchè se non è stato allocato è questo l' errore.
codice:testa=(scrittore**)malloc(sizeof(scrittore*));
perchè dovrei allocarlo più di una volta?
Così non lo allochi più di una voltaOriginariamente inviato da Hr90uB
perchè dovrei allocarlo 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.
No dico, visto che nella funzione l'ho già allocato una volta con
comunque mi sono fatto dare la traccia e come pensavo io (logicamente parlando)codice:*testa=(scrittore *)malloc(sizeof(scrittore*));
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![]()
NO, è *testa che non punta a un' area di memoria allocata.Originariamente inviato da Hr90uB
No dico, visto che nella funzione l'ho già allocato una volta con
codice:*testa=(scrittore *)malloc(sizeof(scrittore));
Stai allocando memoria tramite il puntatore *testa, ma è proprio questo puntatore che prima di poter essere usato, va allocato.Capito ?