传递和修改数组到函数时出错

时间:2015-03-12 11:40:56

标签: c pointers segmentation-fault

void retsom(char **page)
{
    *page = (char*) malloc(sizeof(char) * 10);
    *page[0] = 'a';
    *page[1] = 'b';
}
void main()
{
    char *page = NULL;
    retsom(&page);
    printf("%c %c",page[0],page[1]);

}

此代码给出了分段错误。它在* page [1] ='b'给出了分段错误;

我想传递一个数组来运行并修改其内容。

1 个答案:

答案 0 :(得分:2)

如果你把自己与太多的间接混淆,你经常会遇到这样的问题。更好的是改为:

void retsom(char ** page)
{
    char * newpage = malloc(10);
    if ( !newpage ) {
        perror("couldn't allocate memory");
        exit(EXIT_FAILURE);
    }

    newpage[0] = 'a';
    newpage[1] = 'b';

    *page = newpage;
}

完全避免这个问题。这样做的好处是,如果您想要在malloc()或其他故障的情况下执行除终止之外的其他操作,您还没有覆盖调用者提供的指针,因此您的函数在异常条件下表现得更好。

请注意,根据定义,sizeof(char)总是1,因此是多余的,并且您不应该从C malloc()转换malloc()的返回值{{1}}也可能失败,所以你应该检查它的返回值。