1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| int * bonjour =(int*)malloc(50*sizeof(int)); /*Le cast est superflu, mais OK */
int *allo = bonjour; /* OK */
int i; /* OK */
for(i=1;i<=50;i++) *allo++ = i; /* OK */
*(int*)(&bonjour-2)= 18; /* INDEFINI: Sur les "bons" systèmes 32 bits, je dirais que ça modifie i */
allo= allo - 1; /* OK */
*allo = 999; /* OK: Affecte bonjour[49] */
allo= allo - 1; /* OK */
*allo = 777; /* OK: Affecte bonjour[48] */
allo= allo - 1; /* OK */
*allo = 888; /* OK: Affecte bonjour[47] */
printf("%d\n", (bonjour-100)[147]); /* OK: Affiche bonjour[47], soit 888 */
printf("%d\n", allo-bonjour); /* OK: Affiche 47 */
printf("%d\n",i); /* OK: Affiche i, qui peut avoir été modifié */
allo=(int*)(&allo+1); /* INDEFINI: Sur les "bons" systèmes 32 bits, Peut pointer sur bonjour ou i */
printf("%p\n", **(int**)allo); /* INDEFINI: Déréférence un pointeur indéfini, puis les données pointées elles aussi indéfinies */
free(bonjour); |
Partager