3. Avantages

Cette manière d'allouer un espace mémoire présente plusieurs avantages. Le premier est que vous multipliez systématiquement le nombre d'éléments par leur taille. Il n'est plus question de se demander si sizeof(char) est utile ou non. Au contraire, vous éviterez des erreurs comme celle-ci :

			
int *tableau;
tableau = malloc (N);
/* Trop petit : nous avons oublié de multiplier par la taille d'un entier */

			
		

Avantage suivant, vous n'avez plus besoin de vous demander de quel type est l'élément qui va peupler votre tableau. Ainsi, quel que soit le type de la variable tableau, multipliez le nombre d'éléments par sizeof(*tableau) et vous aurez la taille totale à allouer sans erreur possible due au type des éléments.

L'avantage précédent en cache un autre, encore plus intéressant. En effet, si l'humeur ou les besoins du programme vous poussent à changer le type de la donnée, vous pouvez ainsi modifier la taille nécessaire au stockage. Si elle augmente, et que vous avez utilisé sizeof(type), vous devez modifier le type partout où vous l'avez écrit, avec le risque d'en oublier. Si elle diminue, vous devriez faire de même pour ne pas gaspiller la mémoire. Par contre, si vous utilisez sizeof(*tableau), vous ne changez le type des éléments du tableau qu'une seule fois, et le reste suit.

Note

Renommer une variable vous donnera un peu plus de travail, puisqu'il y a une occurrence de plus à changer par appel à malloc(). Mais nous ne pouvons pas vraiment considérer ceci comme un inconvénient car le préprocesseur nous aide en nous rappelant que la variable a changé de nom lorsque nous avons oublié d'effectuer des modification.

création est mise à disposition sous un contrat Creative Commons