Il voulait mettre *adr.
Ça a l'avantage de suivre automatiquement les changements de type éventuels de adr.
Ça à l'inconvénient d'allouer trop pour un char* en C. En effet:
Code :
- sizeof(char) == 1 //type
- sizeof( 'a') == sizeof(int) //variable
|
C'est une scorie que le C++ corrige.
Pour la contourner, j'utilises une macro:
Code :
- //détermine la taille d'une variable en contournant le cas sizeof('A')==sizeof(int)
- //suppose qu'on peut convertir tout pointeur en char*
- #define TRUESIZE(o) ( (char*)(&(o)+1) - (char*)&(o) )
|
Le cast void* vers T* risquant de devenir déprécié, il est recommandable de caster le malloc.
Je recommande de recourir à une macro qui rend le code plus simple, plus clair, plus sûr et centralise les changements éventuels:
Code :
- #define ALLOCATEN(number,type) (type*)malloc((number)*sizeof(type))
- #define ALLOCATE(type) ALLOCATEN(1,type)
|
Malheureusement, ça ne marche pas avec les types composés de tableau/fonction.
---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone