调用使用 malloc 的函数时显示未初始化的变量

shows variable uninitialized when calling a function that uses malloc

# 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 代码中这显示错误,因为 int *p 未初始化并告诉我将变量 'p' 初始化为 NULL 以消除此警告。但是当我这样做时它编译但显示分段错误,可能是因为我将 6 分配给空地址,那么我该如何解决这个问题?

这个函数

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