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

时间:2017-03-17 18:47:09

标签: c

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

1 个答案:

答案 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而崩溃。