10

當我們創建一個變量並且不初始化它時,那麼一個名爲垃圾值的(隨機)號碼被分配給它。未初始化變量如何獲得垃圾值?

  • 如何將該值分配給變量?
  • 什麼是背後的整體概念/機制?
  • 這是否只發生在C?
+0

我將是最後的譴責^ h omework類型的問題,但這不是顯而易見的? – 2009-09-14 16:57:39

+4

@DJJokepu如果這對我來說很明顯,我不會浪費時間。 – 2009-09-14 17:00:25

+0

@Ravi,答案當然不明顯。我的意思是,這看起來像是從我的一個學校任務中​​提出的一系列問題。那是因爲這些問題的構建方式讓人感覺原始提問者知道他或她的問題的答案。 – 2009-09-14 17:04:01

回答

26

垃圾值不是轉讓,而是價值已經在那裏。當你分配一個變量時,你保留了一塊內存 - 直到你覆蓋它爲止,內存將包含之前存在的任何「隨機」信息。

作爲一個比喻,可以考慮像購買一塊土地那樣分配一個變量 - 直到你用它做了一些事情(比如蓋房子),土地就會擁有已經坐在那裏的垃圾(就像一個破舊的房子) 。

有些語言會自動填充新分配的變量,這需要時間來完成。在更多像C這樣的「自己動手」的語言中,這種額外的行爲是不被保證的(儘管在某些系統中,無論語言如何,內存都被清除,例如作爲安全措施)

+0

啊!那麼比我的:)。大! +1 – vpram86 2009-09-14 17:03:08

+1

例如,MSVC在調試模式下將所有內容初始化爲0xcccccccc(有時可能會非常有用) – 2009-09-14 17:06:50

+7

我喜歡「一塊土地」的隱喻。 +1 – 2009-09-16 14:15:01

2

當我們創建一個變量並且不初始化它時,沒有任何反應。當你從該變量中讀取數值時,你會從內存中獲取數據,其中位於變量的位置。它可能看起來像垃圾/隨機值,只是因爲變量are placed in memory with some degree of randomness.

2

沒有人明確指定一個遺棄值。如果你創建一個變量,只有變量的位置被確定,而不是它的值。這就是爲什麼我們正在初始化它。垃圾值可能來自舊流程對同一內存的某些先前操作!所以它可以容納任何東西。我認爲它適用於相當多的語言。我不清楚這份名單! :)

6

內存被使用並在你的申請。例如,隨着應用程序調用堆棧的增長和收縮,內存中的相同位置可能會被覆蓋很多次。需要記住的是,作爲一段內存被放棄,它不會被清零,所以如果你再次使用它時沒有在內存中指定一個新的初始值,你將會得到舊的「垃圾」值。

一些languagesstructure implementations按默認值初始化內存。其他人不這樣做,因此仔細閱讀您的語言文檔以瞭解期望的內容非常重要。