2012-07-02 147 views
0

爲什麼以下程序不打印垃圾值。據我所知,數組分配的內存(即在編譯時)和堆棧內存包含一些垃圾值。但它不打印垃圾值。它是打印1的。只有在函數g()中,數組b的大小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的內存相同?

回答

5

它是垃圾,由功能f()留下 - 這種效果沒有定義。該效果是編譯器如何在堆棧中分配和取消分配局部變量的副產品。

當函數返回時,編譯器可以產生完全用隨機數據覆蓋堆棧的代碼,或者它可以產生代碼來修改堆棧指針,這就是它在這種情況下所做的。