Questa pagina contiene le risposte ad alcune domande che sono state poste da studenti.
Alcuni studenti hanno ottenuto degli errori in istruzioni in cui è necessaria una conversione di una variabile di tipo void * a un puntatore di altro tipo, per esempio int *. Una situazione in cui questo errore si può verificare è la seguente:
#includeint main() { int *a; a=malloc(10*sizeof(int)); return 0; }
Se questo programma produce errore, vuol dire che una delle opzioni del compilatore non è corretta. In particolare, si può ottenere il seguente errore:
Cannot assign 'void *' to 'int *' in function main()
Questo errore è dovuto al fatto che si sta usando il compilatore C++ invece del compilatore C. Per evitare questo errore occorre:
Se il file è stato salvato con estensione .C, e le opzioni di compilazione sono corrette, l'errore non si dovrebbe più verificare.
Un errore di tipo Nonportable pointer conversion in una istruzione in cui il risultato della malloc viene assegnato a una variabile indica che si sta cercando di assegnare un puntatore a una variabile scalare o viceversa. Per esempio, la istruzione:
a=malloc(...);
Può generare questo errore in due casi:
Occorre quindi accertarsi che il file header sia stato incluso, e che la variabile a cui si assegna il risultato di malloc sia stata effettivamente dichiarata come una variabile puntatore. A questo proposito, si noti che la dichiarazione:
int *b, a;
Dichiara la variabile b come puntatore a intero, mentre la variabile a è un intero.
Molti programmi generano un fallimento quando si tenta di aprire un file in lettura. In particolare, si produce l'errore File not found, anche se il file con il nome specificato esiste.
Questo avviene perchè il programma generato dalla compilazione è in grado di leggere soltanto i file che si trovano nella directory corrente. Esistono due soluzioni:
Funzione | Nome della variabile | Tipo della variabile | InserisciTestaLista prende | Cosa si passa |
CreaLista | l | TipoLista | indirizzo di una var TipoLista | &l |
InserisciDoppio | pl | TipoLista * (indirizzo di una variabile TipoLista) |
indirizzo di una var TipoLista | pl |
L'unico concetto è che va passato quello che la funzione richiede, ossia l'indirizzo di una lista. Nel primo caso abbiamo l, che è una lista, per cui va passato il suo indirizzo. Nel secondo caso abbiamo pl, che è l'indirizzo di una lista, e questo va passato.