C语言越过数组边界访问内存

没有什么可以阻止程序访问为数组分配的空间以外的内存。在本例中,我们声明并初始化了三个数组来说明这种行为。假设数组分配在连续的内存位置。

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);

为了说明如何覆写内存,将三个数组初始化为简单的数字。程序的行为会随着编译器和机器而变化,但是这段代码应该能正常运行并覆写firstNamelastName中的字符,输出如下。图7-2说明了内存分配情况。

116 12X4567
108 X234567
100 123456X

使用无效的数组索引

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程