【发布时间】:2010-06-20 07:31:07
【问题描述】:
我在另一个线程中看到了这段代码
void foo {
int *n = malloc(sizeof(int));
*n = 10;
n++;
printf("%d", *n);
}
这里的错误很明显。 n 没有被取消引用。
存在内存泄漏。
让我们假设有一个垃圾收集器在这里工作。对我们初始值n 的引用计数现在为零,因为n 不再引用它。所以它是垃圾并返回了。但是n 指向的新位置呢?从技术上讲,这个内存区域尚未分配。那么这里的引用计数会不会增加呢?
【问题讨论】:
-
你在想我想的同一个想象中的垃圾检测器吗?
-
为什么其他人删除了他的答案?
-
程序不太可能继续超过 printf,因为您取消引用无效指针,GC 或没有 GC。
-
@kaizer.se:内存是按块分配的,并且块可能大于实际请求的内存量。因此,该程序可能工作得很好 - 取决于编译器。
标签: c memory-management garbage-collection