重新分配ANSI C上的分段错误

时间:2016-04-23 11:44:32

标签: c pointers realloc ansi

如果我运行此代码向我显示“分段错误”,但如果在“创建”功能的“for”中我设置了条款i< 1(即一个循环),程序正在运行,为什么?

void create(char ***a,int *length){
    int i=0;
    *length = 0;
    for(i=0;i<4;i++){
        ++(*length);
        (*a)=realloc(*a,(*length)*sizeof(char *));
        *(a[i])="Hello\0";
    }
}

int main(int argc, char *argv[]) {
    int i;
    char **a = NULL;
    int *l = malloc(sizeof(int));
    create(&a,l);
    for (i=0; i<(*l); i++) {
        printf("%s",a[i]);
    }
    printf("\n");
    return EXIT_SUCCESS;
}

我想要的是,最后,该节目向我展示了4次“你好”

1 个答案:

答案 0 :(得分:4)

*(a[i]) = ...

应该是

(*a)[i] = ...

"Hello"已经隐式的“字符串”字面值会添加终止'\0'字符。因此,无需在此处明确指定 "Hello\0"