2012-02-07 78 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的技术。