栈的使用习惯
- 系统在使用栈开辟内存空间时,是先使用高地址处的空间,然后在使用低地址处的空间。
- 数组、函数传参等,开辟内存空间时,都是从右到左依次开辟的。
//下列这个程序会死循环
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。