11.5.1.5 Gestion de la mémoire dans une fonction
Toute la mémoire nécessaire à une fonction doit être
allouée avec emalloc() ou estrdup(). Ces fonctions ont le goût et l'odeur
des fonctions C classiques malloc() et strdup(). La mémoire doit être
libérée avec efree().
Il y a deux types de mémoire dans ce programme : la mémoire qui est
retournée à l'analyseur, et la mémoire qui nécessaire
pour le stockage temporaire dans la fonction. Lorsque vous assignez une
chaîne dans une variable qui est retournée à l'analyseur,
assurez-vous de bien allouer la mémoire avec emalloc() ou estrdup().
Cette mémoire ne doit JAMAIS être libérée, sauf si
vous réécrivez votre original plus loin, dans la même
fonction (mais ce n'est pas de la programmation propre).
Pour tous vos besoins en mémoire temporaire/permanante dont vous avez
besoin dans vos fonctions/librairies, vous devez utiliser les fonctions
emalloc(), estrdup() et efree(). Elles se comportent EXACTEMENT comme leurs
homologues. Tout ce qui est créé avec emalloc() ou estrdup()
doit être libéré avec efree() à un moment ou un
autre, à moins que ce ne soit utile ailleurs dans le programme;
sinon, il va y avoir une fuite de mémoire. La signification de
"Elles se comportent EXACTEMENT comme leurs homologues" est que si vous
libérez une variable qui n'a pas été créée
avec emalloc() ou estrdup(), vous courez droit à au crash
("segmentation fault"). Soyez alors extrêmement prudent, et
libérez toute votre mémoire inutilisée.
Si vous compilez avec "-DDEBUG", PHP 3 affichera la liste de tous les appels
à emalloc() et estrdup() mais jamais à efree() lorsque celui-ci
intervient dans un script spécifié.
|