请帮助我理解下面的代码,我的预期输出是" 50"。当我返回指针时,我能够得到这个输出" s"来自功能" f"在主要的我需要做这个改变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;
}
答案 0 :(得分:1)
您不会通过引用传递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
而崩溃。