gpt4 book ai didi

有人可以帮助我理解为什么我在下面的程序中遇到段错误

转载 作者:行者123 更新时间:2023-11-30 14:59:20 26 4
gpt4 key购买 nike

请帮助我理解下面的代码,我的预期输出是“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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com