一:越界代码

python中数组越界 数组越界如何定位_python中数组越界

 二:死循环原因

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

三:C语言分段信息

1. 生命周期:变量的作用范围,变量的创建到变量的销毁之间的时间段。

2. 内存:内存储器的存储量,一个数据得占用一块物理空间,逻辑的东西必须有物理的东西来支持。而存储器在一般电脑上是:寄存器-> 缓存->内存->硬盘。

3. 栈区(stack):空间小,系统自动创建销毁。生长方向是由高地址向低地址生长。

4. 堆区(heap):程序员手动开辟,手动释放,程序结束时可能由 OS 回收。使用关键字malloc / new,free / delete对其开辟释放空间,每个人电脑的空间都是有限的。生长方向是由低地址向高地址生长。

5. 静态区( static):内容在总个程序的生命周期内都存在,由编译器在编译的时候分配、存

python中数组越界 数组越界如何定位_数组越界_02

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

        栈区数组越界:

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

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

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

       堆区数组越界:

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

五:C语言压栈顺序

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

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