Si vous ne connaissez pas la taille exacte de la mémoire que vous devez utiliser, vous avez besoin d'une allocation dynamique ( malloc
). Un exemple peut être lorsqu'un utilisateur ouvre un fichier dans votre application. Vous devrez lire le contenu du fichier en mémoire, mais bien sûr vous ne connaissez pas la taille du fichier à l'avance, car l'utilisateur sélectionne le fichier sur place, au moment de l'exécution. Donc, fondamentalement, vous avez besoin malloc
lorsque vous ne connaissez pas à l'avance la taille des données avec lesquelles vous travaillez. Au moins c'est l'une des principales raisons d'utiliser malloc
. Dans votre exemple avec une chaîne simple dont vous connaissez déjà la taille au moment de la compilation (plus vous ne voulez pas la modifier), cela n'a pas beaucoup de sens de l'allouer dynamiquement.
Légèrement hors sujet, mais ... vous devez faire très attention à ne pas créer de fuites de mémoire lors de l'utilisation malloc
. Considérez ce code:
int do_something() {
uint8_t* someMemory = (uint8_t*)malloc(1024);
// Do some stuff
if ( /* some error occured */ ) return -1;
// Do some other stuff
free(someMemory);
return result;
}
Voyez-vous ce qui ne va pas avec ce code? Il existe une instruction de retour conditionnelle entre malloc
et free
. Cela peut sembler correct au début, mais réfléchissez-y. S'il y a une erreur, vous reviendrez sans libérer la mémoire que vous avez allouée. C'est une source courante de fuites de mémoire.
Bien sûr, c'est un exemple très simple, et il est très facile de voir l'erreur ici, mais imaginez des centaines de lignes de code parsemées de pointeurs, de malloc
s, de free
s et de toutes sortes de gestion des erreurs. Les choses peuvent devenir très compliquées très vite. C'est l'une des raisons pour lesquelles je préfère de loin le C ++ moderne au C dans les cas applicables, mais c'est un tout autre sujet.
Donc, chaque fois que vous utilisez malloc
, assurez-vous toujours que votre mémoire est aussi susceptible d'être free
d que possible.
malloc()
peuvent échouer!