栈的使用习惯

  • 系统在使用栈开辟内存空间时,是先使用高地址处的空间,然后在使用低地址处的空间。
  • 数组、函数传参等,开辟内存空间时,都是从右到左依次开辟的。
//下列这个程序会死循环
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

栈中内存结构如下:

image.png


夜枫微凉
27 声望4 粉丝

引用和评论

0 条评论