相邻变量内容互相干扰的一个例子

博客给出一个C++程序用例,展示相邻变量内容互相干扰的情况。程序在GNU C++编译器、WIN2000平台运行,分析运行结果得出系统按变量出场次序从高址往低址分配内存、两变量间有12字节缓冲区,且C/C++不检查数组边界是错误根源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 相邻变量内容互相干扰的一个例子

2003-5-3

 程序用例:

void main()
{
char addrA[5], addrB[5];
printf("the address of addrA is: %d/n", &addrA);
printf("the address of addrA[4] is: %d/n", &addrA[4]);
printf("the address of addrB is: %d/n", &addrB);
printf("the address of addrB[4] is: %d/n", &addrB[4]);
scanf("%s", addrA);
scanf("%s", addrB);
printf("addrA: %s/n", addrA);
printf("addrB: %s/n", addrB);
}

编译器

       GNU C++

运行平台:

       WIN2000

运行结果:

the address of addrA is: 2293616
the address of addrA[4] is: 2293620
the address of addrB is: 2293600
the address of addrB[4] is: 2293604
abcd
abcdefghijklmnopqrstuvwxtyzl
addrA: qrstuvwxtyzl
addrB: abcdefghijklmnopqrstuvwxtyzl 

几点结论:

1、系统按变量出场次序从高址往低址依次分配内容。

2、两个变量之间保留12个字节的缓冲区。

3、C/C++语言不检查数组的边界,这是导致错误的根本原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值