3 votes

Pourquoi l'attribution d'un grand nombre en un seul octet fonctionne-t-elle en C ?

int *ptr = malloc(sizeof(char));

*ptr = 100000;

printf("%d\n", *ptr); // 100000

Cela ne devrait-il pas permettre d'allouer suffisamment de mémoire pour un char c'est-à-dire 1 octet ? Par conséquent, le plus grand nombre ne devrait-il pas être 255 ?

Comment l'impression se poursuit-elle ? 100000 ?

Mise à jour

Merci pour vos réponses. S'il écrase les octets suivants, comment le C peut-il savoir que ce nombre est plus grand qu'un octet, et ne pas se contenter de regarder dans le premier octet ?

1voto

Anthony Mills Points 5333

En général, malloc alloue la mémoire avec une granularité supérieure à celle d'un seul octet, de sorte que votre demande pour un seul octet réservera un espace mémoire arrondi aux 8 octets les plus proches ou quelque chose comme ça. Vous écrivez ensuite dans cet espace, en passant allègrement devant ce que vous avez réservé. Ensuite, vous déréférencez le pointeur, ce qui vous ramène un int et le remettre à printf qui l'imprime avec plaisir.

Comme d'autres l'ont dit, dépendre de ce comportement est une très mauvaise idée. Allouez exactement ce dont vous avez besoin et ne dépassez pas vos tampons.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X