函数中使用的malloc的范围

19 c malloc

当函数返回时,通过malloc分配的内存是否被释放?或者仍然可以使用指针在main()函数中访问它?

例如.

void function(int *a)
{
    a=(int *)malloc(sizeof(int));
    *a=10;
}
int main()
{
    int *num;
    function(num);
    printf("%d",*num);
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

存储在a中的整数可以通过main()访问吗?

nos*_*nos 36

不,当您从函数中退出范围/返回时,不会释放分配有malloc的内存.

你有责任释放你的malloc内存.

但是在你的情况下,内存在main()中是不可访问的,但这是因为你只处理一个局部变量.

void function(int *a)
{
    a=(int *)malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)

这里a是一个局部变量function.指针在C中通过值传递,因此a当您执行function(num);main()时,不会看到您指定指针的本地副本,因此在main中接收指针的副本.

你必须做任何一件事:

void function(int **a)
{
  *a= malloc(sizeof(int));
  **a=10;
}
int main()
{
  int *num;
  function(&num);
  printf("%d",*num);
  free(num);
  return(0);
}
Run Code Online (Sandbox Code Playgroud)

要么

int* function(void)
{
  int *a= malloc(sizeof(int));
  *a=10;
  return a;
}
int main()
{
  int *num;
  num = function();
  printf("%d",*num);
  free(num);
  return(0);
}
Run Code Online (Sandbox Code Playgroud)