0

为什么下面的程序不打印垃圾值。据我所知,堆栈上分配的数组内存(即在编译时)和堆栈内存包含一些垃圾值。但它不打印垃圾值。它正在打印 1's 。仅当在函数 g() 中,数组 b 的大小 > 数组 a 的大小时,它才会打印垃圾值。当 g() 中的数组大小 > 数组 a 的大小时,它会打印 12 个 1(在这种情况下)并作为垃圾值休息。

    void f()
    {
        int a[12],i=0;
        for(i=0;i<12;i++)
          a[i]=1;
    }
    void g()
    {
        int b[12],i=0;
        for(i=0;i<12;i++)
          printf("%d\n",b[i]);
    }
    int main()
    {
         f();
         g();
          return 0;
    }

分配给数组 b 的内存是否与之前分配给数组 a 的内存相同?

4

1 回答 1

5

它是垃圾,由函数留下f()- 这种效果没有定义。该效果是编译器如何在堆栈上分配和释放局部变量的副产品。

编译器可以生成代码以在函数返回时用随机数据完全覆盖堆栈,或者它可以只生成代码来修改堆栈指针,这就是它在这种情况下所做的。

于 2012-07-02T04:11:07.723 回答