当函数返回时,是否释放了通过 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));
在这里,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);
}
或
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/