栈的应用习惯
- 零碎在应用栈开拓内存空间时,是先应用高地址处的空间,而后在应用低地址处的空间。
- 数组、函数传参等,开拓内存空间时,都是从右到左顺次开拓的。
// 下列这个程序会死循环
int main()
{
int i = 0; // 先在栈的高地址开拓 b 的空间,int arr[10] = {1,2,3,4,5,6,7,8,9,10};
// 而后在低地址开拓 arr 的空间(先开拓 10 的空间,而后再是 9、8 ....)for (i = 0; i <= 12; i++)
{arr[i] = 0;
printf("hehehe\n");
}
return 0;
}
// 上述程序中,for 循环中 arr[i] 的拜访溢出了(越界拜访),溢出到 arr[12] 的地址
// 然而 arr[12] 的地址可能与变量 i 重合了
// 所以给 arr[12] 的地址赋值为 0,同时也会把变量 i 也赋值为 0
栈中内存构造如下: