释放在函数中分配的内存

时间:2016-02-13 12:15:21

标签: c function malloc

以此代码为例:

int *doSomething(void) {
    int *something = malloc(sizeof(int));
    return something;
}

int main() {
    int *point = doSomething();
    //code does something...
    free(point);
}

我想知道是否必须释放doSomething()中分配的内存,就像return something;之后我必须free(something);一样?或者free(point);也会清除something? 或者在代码结束之前我可能必须在free(something);函数中执行main

2 个答案:

答案 0 :(得分:4)

不,您不必在doSomething()中释放内存,free(point)应释放malloc()中的内存doSomething(),前提是指针未递增( 涉及指针算法),因为必须传递给free()的指针必须由其中一个* alloc()函数返回。

在检查point之前,您需要注意的是main()中的point != NULL。{/ p>

注意:当你说清除时,你应该知道内存没有被清除,它只是被释放才能再次使用,清除它将是不必要的和昂贵的

答案 1 :(得分:-4)

根据经验,任何对malloc的调用都必须在稍后通过调用free来取得成功。当然,您提供给free的参数必须是malloc的返回值。但是,在您的特定情况下,您已经到达程序的末尾(main函数结束),因此您不必担心该内存,因为它无论如何都将返回到操作系统。调用free更像是迂腐习惯,它还表明你知道你的程序正在使用什么内存。

当你做类似的事情时情况会变得更糟:

int *p = malloc(...);
/* do some stuff */
p = malloc(...);

在上面的示例中,第一个malloc分配的内存块将永远丢失(也就是说只要程序运行)。