c - 函数中使用的 malloc 范围

标签 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);
}

这里的main()可以访问到a中存储的整数吗?

最佳答案

不,当您离开作用域/从函数返回时,使用 malloc 分配的内存不会被释放。

您负责释放您 malloc 的内存。

虽然在您的情况下,内存在 main() 中不可访问,但那是因为您只处理局部变量。

void function(int *a)
{
    a=(int *)malloc(sizeof(int));

在这里,afunction 中的局部变量.指针在 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);
}

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);
}

关于c - 函数中使用的 malloc 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3629082/

相关文章:

c - 获取错误 "passing argument 2 of ‘strcmp’ 使指针来自整数而不进行转换“比较两个字符串

c++ - 使用分配器替代 malloc()/free()?

ios - 如何计算 NSDictionary 对象的总大小?

c - 在function中分配,在main中不可用

C、虽然不起作用,

c - 使用 "undefined symbol: new_add"后还是报 "objcopy --redefine-sym add=new_ad"

c - 使用 Eclipse IDE 作为我的编程语言的文本编辑器

c - C 编译器 (clang) 如何强制执行 const?

c - valgrind 将哪些所有 C 操作视为 'malloc' 和 'free' ?

c - 读取输入(int)并使用 malloc 和 realloc 将其存储到数组中