回答
垃圾值不是轉讓,而是價值已經在那裏。當你分配一個變量時,你保留了一塊內存 - 直到你覆蓋它爲止,內存將包含之前存在的任何「隨機」信息。
作爲一個比喻,可以考慮像購買一塊土地那樣分配一個變量 - 直到你用它做了一些事情(比如蓋房子),土地就會擁有已經坐在那裏的垃圾(就像一個破舊的房子) 。
有些語言會自動填充新分配的變量,這需要時間來完成。在更多像C這樣的「自己動手」的語言中,這種額外的行爲是不被保證的(儘管在某些系統中,無論語言如何,內存都被清除,例如作爲安全措施)
啊!那麼比我的:)。大! +1 – vpram86 2009-09-14 17:03:08
例如,MSVC在調試模式下將所有內容初始化爲0xcccccccc(有時可能會非常有用) – 2009-09-14 17:06:50
我喜歡「一塊土地」的隱喻。 +1 – 2009-09-16 14:15:01
當我們創建一個變量並且不初始化它時,沒有任何反應。當你從該變量中讀取數值時,你會從內存中獲取數據,其中位於變量的位置。它可能看起來像垃圾/隨機值,只是因爲變量are placed in memory with some degree of randomness.
沒有人明確指定一個遺棄值。如果你創建一個變量,只有變量的位置被確定,而不是它的值。這就是爲什麼我們正在初始化它。垃圾值可能來自舊流程對同一內存的某些先前操作!所以它可以容納任何東西。我認爲它適用於相當多的語言。我不清楚這份名單! :)
內存被使用並在你的申請。例如,隨着應用程序調用堆棧的增長和收縮,內存中的相同位置可能會被覆蓋很多次。需要記住的是,作爲一段內存被放棄,它不會被清零,所以如果你再次使用它時沒有在內存中指定一個新的初始值,你將會得到舊的「垃圾」值。
一些languages和structure implementations按默認值初始化內存。其他人不這樣做,因此仔細閱讀您的語言文檔以瞭解期望的內容非常重要。
C類標準說:
- 局部變量未定義行爲:(Why) is using an uninitialized variable undefined behavior?(例如段錯誤是合法的)
- 全局變量爲零:What happens to a declared, uninitialized variable in C? Does it have a value?
實現:https://stackoverflow.com/a/36725211/895245摘要:在實施詳細檢查
- 地方:地址不會被寫入,所以無論在那裏以前被使用
- 全球:
.bss
- 1. C++:未初始化的變量垃圾
- 2. 未初始化的變量如何獲得一個隨機值?
- 3. 獲得垃圾值
- 4. 如何從Clang 2.9獲得未初始化的變量警告?
- 5. 如何從tf.report_uninitialized_variables獲得未初始化變量的列表
- 6. 如何初始化char指針數組,以避免垃圾值?
- 7. 變量中獲得初始化爲零
- 8. 未初始化的枚舉變量值
- 9. java變量未初始化
- 10. 變量未初始化
- 11. 變量未初始化
- 12. 變量未被初始化
- 13. C變量未初始化
- 14. 變量未初始化
- 15. 未初始化的初始值常量
- 16. 如何初始化變量無值
- 17. 如何初始化變量?
- 18. 如何初始化變量?
- 19. Java變量值初始化
- 20. 開始C.變量未被初始化
- 21. 初始化對象時,實例變量始終未初始化?
- 22. 成功初始化後,struct成員被垃圾值覆蓋
- 23. 正在初始化一個垃圾變量真正初始化或只是一個任務?
- 24. ios swift初始化未初始化的實例變量
- 25. 實際初始化的未初始化的局部變量?
- 26. 變量初始化並聲明後可能尚未初始化
- 27. 值未初始化
- 28. 爲什麼gcc垃圾回收對初始化的全局變量和未初始化的全局變量的行爲不同?
- 29. 正在初始化一個未初始化變量的變量是否合法?
- 30. TensorFlow:「嘗試使用未初始化的值」在變量初始化中
我將是最後的譴責^ h omework類型的問題,但這不是顯而易見的? – 2009-09-14 16:57:39
@DJJokepu如果這對我來說很明顯,我不會浪費時間。 – 2009-09-14 17:00:25
@Ravi,答案當然不明顯。我的意思是,這看起來像是從我的一個學校任務中提出的一系列問題。那是因爲這些問題的構建方式讓人感覺原始提問者知道他或她的問題的答案。 – 2009-09-14 17:04:01