C语言 将数组传递和修改到函数时出错


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() 的返回。 malloc()也可能失败,因此您应该检查其返回值。

相关内容

  • 没有找到相关文章

最新更新