为什么以下程序不打印垃圾值。据我所知,数组在堆栈上分配内存(即在编译时)和堆栈内存包含一些垃圾值。但它不是打印垃圾值。它打印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的内存相同?
答案 0 :(得分:5)
它是垃圾,由函数f()
留下 - 并且没有定义此效果。效果是编译器如何在堆栈上分配和释放局部变量的副产品。
编译器可以生成代码,在函数返回时用随机数据完全覆盖堆栈,或者只生成修改堆栈指针的代码,这就是它在这种情况下的作用。