Bonsoir,
pour commencer, voici le code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
#include <stdio.h>
#include <stdlib.h>
int main () {
int* foo = NULL;
int i = 0;
foo = malloc(sizeof(int));
while (1) {
foo[i] = i;
printf("%i\n", foo[i]);
i++;
}
return 0;
} |
l'oeil du programmeur avisé y voit normalement une magnifique erreur de segmentation, dès la seconde itération, puisque l'on tente d'accéder à un bout de mémoire non alloué par le programme... or celle-ci ne survient qu'après... 262111 itérations !!
Je me doute qu'il ne s'agit pas d'un bug, mais est-ce dû au compilateur effectue quelques tests préliminaires pour définir une taille suffisante (ou pas) lors de l'allocation, ou est-ce le gestionnaire de mémoire de mon OS qui a tendance à être laxiste ? À moins que cela-soit un comportement tout à fait normal, auriez-vous davantage d'informations ? 
Voici ma commande de compilation:
gcc -02 -Wall -W -Werror -pedantic -ansi main.c -o out
Merci d'avance !
Ps: je sors de plusieurs mois d'OCaml et de Pascal, quel choc !
Partager