调用使用 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);
# 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);