Re: [gull] Subtilité de C n° 2 : type de retour de malloc

Marc Mongenet marc at mongenet.ch
Fri Apr 4 15:18:13 CEST 2008


Le 04/04/08, Leopoldo Ghielmetti<leopoldo.ghielmetti at a3.epfl.ch> a écrit :
>
> Donc il semblerait que peu importe s'il s'agit d'une architecture 32b ou
>  64b, les deux codes compilent correctement. Du moins avec le compilateur
>  gcc 4.1.2 sur architecture intel.
>

Par curiosité, pourrais-tu essayer avec l'option -fno-builtin ?

En effet, comme on voit avec GCC 4, le compilateur connait
en interne (donc même sans include !) les déclarations
standards des fonctions standards comme malloc et printf :

toto.c:3: warning: incompatible implicit declaration of built-in
function 'malloc'

Et on voit qu'il se plaint que les types sont incompatibles entre
la déclaration de malloc built-in (void *malloc()) et celle qu'il
déduit implicitement du source (int malloc()).

Tu as bien fait d'utiliser le pointeur, c'est effectivement à ce
moment que je m'attend à un crash possible, pas au retour
de malloc. Cela dit, si le compilateur ne lit que 32 bits (un int)
au lieu de 64 (un void*) de la valeur retournée par malloc, mais
que l'adresse tient sur 32 bits (comme 0x501010 dans ton
exemple), peut-être que ça marchera tant que l'allocation ne
dépasse pas les 4 Go.

-- 
Marc Mongenet
Creator of the Web 2 Markup Language
http://w2ml.com



More information about the gull mailing list