没有什么可以阻止程序访问为数组分配的空间以外的内存。在本例中,我们声明并初始化了三个数组来说明这种行为。假设数组分配在连续的内存位置。
char firstName[8] = "1234567";
char middleName[8] = "1234567";
char lastName[8] = "1234567";
middleName[-2] = 'X';
middleName[0] = 'X';
middleName[10] = 'X';
printf("%p %s\n",firstName,firstName);
printf("%p %s\n",middleName,middleName);
printf("%p %s\n",lastName,lastName);
为了说明如何覆写内存,将三个数组初始化为简单的数字。程序的行为会随着编译器和机器而变化,但是这段代码应该能正常运行并覆写firstName
和lastName
中的字符,输出如下。图7-2说明了内存分配情况。
116 12X4567
108 X234567
100 123456X