C libérera-t-il automatiquement la mémoire sans pointeur?

Disons que nous exécutons ce morceau de code de manière isolée:

malloc(1024); 

Cela entraînera-t-il une fuite de mémoire ou C saura-t-il automatiquement libérer un pointeur sans référence?

En d’autres termes, puis-je éviter de devoir l’assigner à un pointeur?

 void *p = malloc(1024); free(p); 

Dans tout code que vous écrivez qui alloue dynamicment de la mémoire, vous avez 2 responsabilités concernant chaque bloc de mémoire alloué: (1) conservez toujours un pointeur sur l’adresse de départ du bloc de mémoire afin (2) de pouvoir le libérer quand il n’est pas plus besoin. Libérer la mémoire est à vous .

Si vous affectez un nouveau bloc de mémoire à un pointeur qui pointe actuellement sur un bloc de mémoire existant sans d’abord libérer le bloc, vous venez d’écraser l’ adresse de début du bloc de mémoire d’origine détenu par le pointeur (non conforme à la règle 1 ci-dessus ) et vous avez maintenant perdu la possibilité de libérer le bloc d’origine – ce qui correspond à votre fuite de mémoire.

C’est une fuite de mémoire. C ne fait absolument aucune gestion de mémoire pour vous (sauf pour le compilateur C qui alloue de l’espace stack pour les variables).