Encore une question sur malloc
Je débute en C - donc je me pose plein de questions! -et j'aurai besoin d'éclaircissement quant au fonctionnement du code ci-dessous :
Code:
1 2 3 4 5 6 7 8
| int main()
{
char stream[10];
printf("sizeof(stream) : %d\n", sizeof(stream));
return 0;
}
} |
On obtient à l'écran : sizeof(stream) : 10, jusqu'ici tout va bien, mais si on initialise la variable avec malloc de cette maniere :
Code:
1 2 3 4 5 6 7 8 9 10 11
| int main()
{
char* stream;
stream= malloc(10*sizeof(char));
if(!stream) {
printf("sizeof(stream) : %d\n", sizeof(stream));
free(stream);
}
return 0;
} |
Dans ce cas de figure j'obtiens : sizeof(stream) : 4
Pourquoi????
Merci d'avance
[Balises [CODE] ajoutées par gl, merci d'y penser à l'avenir]
Re: Encore une question sur malloc
Citation:
Envoyé par IG88
Code:
1 2 3 4 5 6 7 8
| int main()
{
char stream[10];
printf("sizeof(stream) : %d\n", sizeof(stream));
return 0;
}
} |
On obtient à l'écran : sizeof(stream) : 10, jusqu'ici tout va bien, mais si on initialise la variable avec malloc de cette maniere :
Code:
1 2 3 4 5 6 7 8 9 10 11
| int main()
{
char* stream;
stream= malloc(10*sizeof(char));
if(!stream) {
printf("sizeof(stream) : %d\n", sizeof(stream));
free(stream);
}
return 0;
} |
Dans ce cas de figure j'obtiens : sizeof(stream) : 4
Parce qu'un pointeur n'est pas un tableau. Ici, c'est une variable qui contient l'adresse du tableau. Visiblement, sur ton système, une adresse est codée par une valeur qui peut occuper jusqu'à 4 bytes. Donc le pointeur (qui est la variable qui contient cette valeur) a une taille en conséquence.