gpt4 book ai didi

c - 函数中使用的 malloc 范围

转载 作者:太空狗 更新时间:2023-10-29 16:29:13 25 4
gpt4 key购买 nike

当函数返回时,是否释放了通过 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com