malloc会在函数结束时自动释放内存吗?

时间:2015-12-20 16:39:28

标签: c

如果有人能帮助我完全理解以下代码之间的差异,我将非常高兴:

// Code (1)
void f1 ( void ){
  int * ptr1 = malloc ( sizeof(int) );
}

// Code (2)
void f2 ( void ){
  int * ptr2 = malloc ( sizeof(int) );
  free(ptr2);
}

据我所知,无指令对于释放已用内存非常有用,但另一方面我知道每次调用函数g时,如果这里有新的变量要声明,它们将被创建并且在执行g之后销毁(即解除分配,对吧?)

因此:

  

我们是否需要使用Code(2)中的免费指令,或者它是多余的? (但可能建议使代码更清晰)

由于

Ps:您可能也有兴趣帮助我My previous related question。在那里,一些用户建议使用动态分配内存,我试图理解为什么/如何。

1 个答案:

答案 0 :(得分:2)

除了解释有关C dynamic memory allocation的其他答案以及需要为每个free - ed数据明确调用malloc(以及 时调用{{ 1}}是一个问题;您想避免memory leaks),并且您会发现valgrind这样的工具很有用,您也可以考虑使用Boehm's garbage collector 。你基本上可以在整个程序中用free替换malloc而不用担心明确的GC_malloc - 。

当然,请阅读garbage collection上的wikipage,然后阅读。{3}}  GC handbook。它确实有一些警告。所以Boehm的GC是not a silver bullet