linux怎么检查越界,C语言指针越界访问示例

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对数组下标不做检查;指针越界访问内存,编译器不会提示错误。利用越界的指针读写内存,轻则程序结果错误,重则直接导致程序崩溃。0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值