INTRODUZIONE ALLA PROGRAMMAZIONE IN C



Assegnazione indiretta illegale



Supponiamo di avere una funzione malloc() che prova ad allocare dinamicamente la memoria (in fase di esecuzione) e ritorna un puntatore al blocco di memoria richiesto nel caso in cui termini con successo, oppure un puntatore nullo nell'altro caso. char *malloc() - una funzione della libreria standard (che vedremo poi) Abbiamo un puntatore: char *p; Consideriamo: *p = (char *) malloc(100); /* richiesta di 100 bytes di memoria */ *p = `y'; C'e' un errore in queste istruzioni. Qual'e'? Nell'istruzione *p = (char *) malloc(100); non va messo il carattere "*" associato al puntatore. Questo e' dovuto al fatto che la funzione malloc ritorna un puntatore. Inoltre, "p" non punta a nessun indirizzo. L'istruzione corretta dovrebbe essere: p = (char *) malloc(100); Questa istruzione rivela un ulteriore problema nel caso in cui non ci sia memoria disponibile e "p" sia nullo; percio' non potremo fare l'assegnazione: *p = `y'; Un buon programma C dovrebbe controllare questa possibilita': p = (char *) malloc(100); if ( p==NULL) { printf "Error: Out of Memory \n"); exit(1); } *p=`y';