#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 的地址作为 ptr1、ptr2、ptr3 之间的差异 0f 10 而不是差异 4 个字节。另外我在这里检查堆栈损坏。数据段(ptr1,ptr2,ptr3)中的值如何破坏堆栈段(a)中的值。而这种无声的腐败是什么。