《转载学习》C语言数组越界行为

注:
版权声明:本文为CSDN博主「森明帮大于黑虎帮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44918090/article/details/120296784

 一:越界代码

 二:死循环原因

        局部变量 i 和 arr 在栈区上被使用,因为栈区的生长方向是高地址向低地址生长,所以栈区是先使用高地址处的空间,后使用低地址处的空间,又因为数组随着下标的增长地址由低向高变化,当越界访问适当时,就会访问到变量 i ,执行arr[i]=0;后就会将 i 置为0,导致程序陷入死循环中

三:C语言分段信息

1. 生命周期:变量的作用范围,变量的创建到变量的销毁之间的时间段。
2. 内存:内存储器的存储量,一个数据得占用一块物理空间,逻辑的东西必须有物理的东西来支持。而存储器在一般电脑上是:寄存器-> 缓存->内存->硬盘。
3. 栈区(stack):空间小,系统自动创建销毁。生长方向是由高地址向低地址生长。
4. 堆区(heap):程序员手动开辟,手动释放,程序结束时可能由 OS 回收。使用关键字malloc / new,free / delete对其开辟释放空间,每个人电脑的空间都是有限的。生长方向是由低地址向高地址生长。
5. 静态区( static):内容在总个程序的生命周期内都存在,由编译器在编译的时候分配、存

 四:栈区数组越界和堆区数组越界区别

        栈区数组越界:

       1:栈区数组越界会将形参或者局部变量踩,可能导致函数运行参数取空,进程崩溃。

       2:形参或者局部变量是循环停止条件,可能导致死循环。

       3:函数调用栈越界,可能将下一条指令跳转地址或者上层函数地址踩,导致命令执行异常,或者访问非法函数地址。

       堆区数组越界:

      1:堆访问越界,当越界地址没有分配给其他内容,则不会存在明显副作用。已经分配给其他线程使用,则会出现踩内容。同时由于堆分配的内存,实际会比malloc的大,在踩内存是不一定会踩到其他变量或者线程的空间

五:C语言压栈顺序

       C语言采用压栈顺序为从右到左的顺序。

       如函数function(int a, int b, int c),在栈中存储顺序应该为 c --- > b ---- >a

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值