Ces quelques idées sur l'allocation de mémoire vous pousseront peut-être à définir une macro comme ceci :
#define new(var, nb) ((var) = malloc((nb) * sizeof(*(var)))) /* ... */ int *tableau; new (tableau, N);
Nous aurions tendance à penser que cette manière de faire est à éviter. Cependant, je n'ai trouvé aucun exemple spectaculaire montrant qu'il ne faut pas le faire. Certaines constructions viennent à l'esprit, mais si la macro est bien écrite, cela doit fonctionner :
int *tableau; tableau = new (tableau, N);
ou
int *tableau; if (NULL == (tableau = new (tableau, N))) { /* Message d'erreur */ exit (EXIT_FAILURE); }
Que penser de cette macro ? Est-elle révolutionnaire, ou est-il tellement évident de ne pas l'utiliser que nous ne voyons pas pourquoi ? J'hésite à vous la conseiller et j'en reste à la bonne vieille utilisation de malloc()
qui a fait ses preuves.
© 2005 Yves Mettier