将数组解析和修改为函数时出错

Error in passing and modifying a array to a function

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' 处给出分段错误;

我想传递一个数组来函数并修改它的内容。

如果您将自己与过多的间接联系混淆,您经常会遇到这样的问题。更好的是更改为:

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() 强制转换 return。malloc() 也可能失败,所以你应该检查它的 return 值。