关于数组越界(内存泄漏)的那点事儿(C语言)

关于数组越界(内存泄漏)的那点事儿(C语言)

  数组越界在C语言是一个很常见的问题,但是也正是因为它很常见,有时候也会出现一些不可思议,难以理解的情况,就像下面这样。

情形如下:
情形
如果难以理解,我们来打印一下数组a每个节点的地址以及num的地址。

如下:
效果图
  我们可以看到,当数组a循环到a[12]的时候与num的地址完全相同。从而覆盖了num已有的值12,变成a[ ] = 0的值,即0。重新累加。
  我们思考可以发现,此时num跟a[9]相差8个字节的偏移量。那么我们会想,不管num是任意数据类型,都会只差8个字节的大小呢?

  因此我做了以下实验:
效果图
  发现此时相差12个字节的偏移量,因此并不是固定且有规律只相差8个字节的偏移量,与num的数据类型是相关联的。

总结:内存是连续的线性排布。且与编译器处理的安全隔离相关联。(编译器不同处理方式可能不同)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ufgnix0802

总结不易,谢谢大家的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值