"本地功能中的malloc,主要的空闲内存"可以吗?怎么样?

shi*_*hwa 8 c free pointers memory-management

我在书中了解到,如果我需要从函数返回指针,我会使用malloc()并从堆中获取内存.我想知道如何free()在函数后分配内存.

可以做我在下面的代码中做的事情来释放那个内存吗?如果它不正确,在功能后释放内存的正确方法是什么?

int *Add_them_up (int *x, int *y)
{
    int *p = (int *) malloc(sizeof (int));
    *p = *x + *y;
    return p;
}


int main ()
{   
    int c = 3;
    int d = 4;
    int *presult = NULL;
    presult = Add_them_up (&c, &d);
    printf ("the result of adding is:%d\n", *presult);
    free (presult);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 6

是的,您的代码是正确的.条件适用,请参阅下面的注释

对于free()分配的内存,您只需要传递来自malloc()和family 的返回指针.

当你malloc()Add_them_up()函数返回返回相同的指针并将其存储presultmain(),你可以调用

free (presult);
Run Code Online (Sandbox Code Playgroud)

没有任何问题.它将执行预期的工作.


注意:你在这里缺少两个方面,例如

  1. 参阅为什么不投的返回值malloc()在和家人malloc().
  2. p在使用返回的指针之前,请务必检查是否成功.

也就是说,只是一个建议,总是尝试使用表格

int *p = malloc(sizeof(*p));
Run Code Online (Sandbox Code Playgroud)

这使得分配语句独立于类型free(),从而产生最强大的代码.