#include <stdio.h>
main()
{
int *ptr1 = malloc (2);
int *ptr2 = malloc (4);
int *ptr3 = malloc (16);
printf("ptr1 - %x \n", ptr1);
printf("ptr2 - %x \n", ptr2);
printf("ptr3 - %x \n", ptr3);
*ptr1 = 0x1111;
*ptr2 = 0x2222;
*ptr3 = 0x3333;
#if 1
// silent corruption...
*(ptr1+2) = 0xabcd;
#endif
#if 1
// corruption
*(ptr1+3) = 0xbeee;
#endif
{
int a;
scanf("%d", &a);
}
free(ptr1);
free(ptr2);
free(ptr3);
}
В приведенной выше программе я получаю адрес ptr как разность 0f 10 между ptr1, ptr2, ptr3 вместо разницы 4 байта. Также я проверяю повреждение стека здесь. Как значения в сегменте данных (ptr1, ptr2, ptr3) разрушают значение в сегменте стека (a) здесь. И что это за безмолвная коррупция.Значения сегментов данных, искажающие переменные стека
+1 только для искусства ascii (woot!). (и, конечно, за действительный ответ). – WhozCraig