不打印垃圾值

时间:2012-07-02 04:08:19

标签: c arrays printf garbage

为什么以下程序不打印垃圾值。据我所知,数组在堆栈上分配内存(即在编译时)和堆栈内存包含一些垃圾值。但它不是打印垃圾值。它打印1。只有当函数g(),数组b的大小> 1时才会打印垃圾值。数组的大小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的内存相同?

1 个答案:

答案 0 :(得分:5)

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

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