C语言指针越界访问示例

2014-11-24 09:07:22 · 作者: · 浏览: 0

C语言对数组下标不做检查,指针常常越界访问;我们编程时要特别注意。


一、示范代码


#include
#include
int a[10];
int b[10];
void main()
{
memset(a,0,sizeof(int)*10);
memset(b,0,sizeof(int)*10);
a[10]=10;
cout<}


在上例中,编译链接通过,但程序运行结果 b[0]=10;


输出a[10]和b[0]地址:


#include
#include
int a[10];
int b[10];
void main()
{
cout<cout<}


结果:


a[10] 地址为 0x41454c


b[0]地址为 0x41454c


备注:上述程序在vc6.0下编译,不同编译系统地址值可能不同;但a[10]和b[0]地址值始终相同。


二、解释


连续定义的全局变量在内存中是连续存放的,同时C对数组下标不做检查;指针越界访问内存,编译器不会提示错误。利用越界的指针读写内存,轻则程序结果错误,重则直接导致程序崩溃。