提问人:DatMomoAgain 提问时间:1/31/2022 最后编辑:Vlad from MoscowDatMomoAgain 更新时间:1/31/2022 访问量:66
调用使用 malloc [duplicate] 的函数时显示变量未初始化
shows variable uninitialized when calling a function that uses malloc [duplicate]
问:
# include<stdio.h>
# include<stdlib.h>
void fun(int *a)
{
a = (int*)malloc(sizeof(int));
}
int main(void)
{
int *p;
fun(p);
*p = 6;
printf("%d\n",*p);
free(p);
return(0);
}
在 vs code 中,这显示错误,因为 int *p 未初始化,并告诉我将变量“p”初始化为 NULL 以静音此警告。但是当我这样做时,它编译但显示分段错误,可能是因为我将 6 分配给空地址,那么我该如何解决这个问题?
答:
2赞
Vlad from Moscow
1/31/2022
#1
此功能
void fun(int *a)
{
a = (int*)malloc(sizeof(int));
}
更改自己的局部变量(参数)。也就是说,该函数处理传递指针值的副本a
p
int *p;
fun(p);
指针保持不变且未初始化。p
要使程序正确,您需要按以下方式更改代码
void fun(int **a)
{
*a = (int*)malloc(sizeof(int));
}
//...
int *p;
fun( &p);
尽管在这种情况下,最好声明和定义函数,例如
int * fun( void )
{
return malloc(sizeof(int));
}
//...
int *p = fun();
if ( p )
{
*p = 6;
printf("%d\n",*p);
}
free(p);
评论
a