2012-02-07 80 views
-5

如果我們做這樣的事在Java中使用C會發生什麼:C有垃圾收集器像Java嗎?

temp.next = temp.next.next; 

會發生什麼temp.next節點?在Java中有一個轉儲/垃圾收集器; C中有類似的東西嗎?

+2

問題的標題應該是「C是否有垃圾回收器」問題應該不同。答案是不。 – Eregrith 2012-02-07 12:20:00

+0

當然,感謝Eregrith – Zeemaan 2012-02-07 12:22:13

+0

C沒有垃圾收集。如果你有興趣知道爲什麼,http://stackoverflow.com/questions/4039274/was-there-a-specific-reason-garbage-collection-was-not-designed-for-c/4039474#4039474 – 2012-02-07 14:37:02

回答

5

什麼都不會發生。它會繼續使用內存,你將失去使用它或釋放它的任何手段。

在C中,你必須明確free你通過malloc獲得的東西,當你完成它時,沒有引用計數或垃圾收集的東西。

1

在c中,如果你沒有free你通過malloc分配的內存,它只會坐在那裏,直到程序執行結束。

與Java不同,C沒有垃圾收集。

2

C沒有自動垃圾收集。如果你失去了一個對象的軌跡,你就會有所謂的「內存泄漏」。內存仍然會作爲一個整體分配給程序,但是如果你丟失了最後一個指針,那麼沒有人能夠使用它。內存資源管理是C程序的一個關鍵要求。因此,無論何時您在C中動態分配內存,您都需要知道何時以及如何釋放內存。

有些工具可以幫助您。其中值得注意的是valgrind,它使用類似於市售Purify的技術。