Voici un code que j'ai écrit pour le compilateur GCC
.Comportement intéressant de malloc()
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;
p = (int *)malloc(9 * sizeof(char));
p[0] = 2147483647;
p[1] = 2147483647;
p[2] = 1025;
printf("%d, %d, %d, %d\n", sizeof(char), *(p), *(p+1), *(p+2));
}
La sortie est la suivante:
1, 2147483647, 2147483647, 1025
Ma question est, bien que je n'a alloué que 9 octets au pointeur, il semble utiliser tous les 12 octets. Le résultat est le même (sauf un avertissement de compilateur), si je lance (char *)
au lieu de (int *). L'attribution de malloc()
est-elle complète? c'est-à-dire qu'il alloue toujours en multiples de Data Type du pointeur, indépendamment de ce que nous avons alloué? ou est-ce spécifique à la mise en œuvre?
Les bits doivent-ils être en octets? PS - Vous n'avez pas besoin de la distribution. –
Vous avez fait quelque chose de non légal et personne n'a remarqué. Est-ce que cela le rend légal? –
Merci. J'ai corrigé –