【发布时间】:2022-01-30 21:14:47
【问题描述】:
# 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 分配给空地址,那么我该如何解决这个问题?
【问题讨论】:
-
函数参数在 C 中通过值传递。所以
a是函数中的局部变量。设置它不会改变调用者的变量。有关更多详细信息和建议的修复,请参阅重复的帖子。 -
侧节点:你可能想读这个:Do I cast the result of malloc?
标签: c function initialization pass-by-reference pass-by-value