如果有人能帮助我完全理解以下代码之间的差异,我将非常高兴:
// 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。在那里,一些用户建议使用动态分配内存,我试图理解为什么/如何。
答案 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。