请帮助我理解下面的代码,我的预期输出是“50”。当我从函数“f”返回指针“s”时,我能够得到此输出,并且在 main 中我需要进行此更改 s = f(s,i)。
void f(char *s,int i)
{
s = (char*)malloc (20 *sizeof(char));
s[i++]=50;
s[i++]=53;
return;
}
int main()
{
int i = 10;
char *s = NULL;
f(s,i);
printf(" s[%d]= %u \n",i,s[i]);
free(s);
return 0;
}
最佳答案
您不通过引用传递s
。
void f(char **s,int i)
{
*s = malloc(20 * sizeof(char));
(*s)[i++] = 50;
(*s)[i++] = 53;
}
int main()
{
int i = 10;
char *s = NULL;
f(&s,i);
printf(" s[%d]= %u \n", i, s[i]);
free(s);
return 0;
}
问题是,在您的情况下,从 f(s, i);
返回后,在 main()
中变量 s
没有改变,因此仍然是NULL
。然后崩溃发生在 printf(..., s[i]);
调用中。特别注意 free(s)
不会崩溃,因为 free
can also be passed NULL
.
关于有人可以帮助我理解为什么我在下面的程序中遇到段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42865069/