In un codice che ho usato per errore
list* Head = malloc(sizeof(list*));
invece del corretto
list* Head = malloc(sizeof(list));
per creare un nuovo nodo di tipo list
ma ha funzionato bene in seguito.
Quindi la mia domanda è: perché ha funzionato correttamente?
L’idea qui è, malloc()
non ha idea (tipo / dimensione) o relazione alla variabile a cui verrà assegnato il valore di ritorno. Accetta l’argomento di input, alloca la memoria della dimensione richiesta e restituisce un puntatore al blocco di memoria, il gioco è fatto. Quindi, nel caso in cui hai richiesto una dimensione errata del blocco di memoria, malloc()
non ha nulla per impedirti di farlo. Una volta che usi il puntatore restituito, lo sarai
Ora, in entrambi i casi, potresti vederlo funzionare correttamente . Il primo è in qualche modo ammissibile (anche se dovrebbe essere evitato) ma il dopo è un rigoroso no-go.
Parola di consiglio:
Per evitare questo tipo di errori, utilizzare il formato
type * variable = malloc(sizeof *variable);
in tal caso, hai due vantaggi,