首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言指针越境访问示例

2012-12-18 
C语言指针越界访问示例C语言对数组下标不做检查,指针常常越界访问;我们编程时要特别注意。一、示范代码#incl

C语言指针越界访问示例

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

一、示范代码

#include<iostream.h>#include<memory.h>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]<<endl;}

 

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

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

#include <iostream.h>#include<memory.h>int a[10];int b[10];void main(){cout<<hex<<(unsigned int)&a[10]<<endl;cout<<hex<<(unsigned int)&b[0]<<endl;}


结果:

a[10] 地址为 0x41454c   

 b[0]地址为    0x41454c

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

 

二、解释

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

 

 

热点排行