【问题标题】:Not Printing garbage value不打印垃圾值
【发布时间】:2012-07-02 04:08:19
【问题描述】:

为什么下面的程序不打印垃圾值。据我所知,堆栈上分配的数组内存(即在编译时)和堆栈内存包含一些垃圾值。但它不打印垃圾值。它正在打印 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的内存一样吗?

【问题讨论】:

    标签: c arrays printf garbage


    【解决方案1】:

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

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

    【讨论】: