C 动态数组代码不断崩溃

C 动态数组代码不断崩溃,c,C,这是一个非常简单的C程序,我不明白它为什么会崩溃: int main () { size_t argc = 2; char **argv = malloc(argc * sizeof(char *)); for (int i = 0; i < 20; i++) { if (i >= argc) { argc *= 2; argv = realloc(argv, argc); }

这是一个非常简单的C程序,我不明白它为什么会崩溃:

int main () {

    size_t argc = 2;
    char **argv = malloc(argc * sizeof(char *));
    for (int i = 0; i < 20; i++) {
        if (i >= argc) {
            argc *= 2;
            argv = realloc(argv, argc);
        }
        argv[i] = strdup("hello world!");
    }

    for (int i = 0; i < 20; i++) {
        printf("argv[%d] = \"%s\"\n", i, argv[i]); // it crashes on this line
        free(argv[i]);
    }

    free(argv);
}
int main(){
尺寸argc=2;
char**argv=malloc(argc*sizeof(char*);
对于(int i=0;i<20;i++){
如果(i>=argc){
argc*=2;
argv=realloc(argv,argc);
}
argv[i]=strdup(“你好,世界!”);
}
对于(int i=0;i<20;i++){
printf(“argv[%d]=\%s\“\n”,i,argv[i]);//它在此行崩溃
自由(argv[i]);
}
自由(argv);
}

尺寸不对;您需要的是
argc*sizeof(*argv)

当您执行
realloc
时,您将为N个字符分配空间,而不是为字符分配N个指针

再说一次,既然您只想为20个项目分配空间,为什么不先为20个项目分配空间,将数据放在那里,然后处理它呢

#define size 20
char **argv = malloc(size * sizeof(char *));
if (argv == NULL) {
    fprintf(stderr, "Allocation failed!");
    return 1;
}
for (int i=0; i<size; i++)
    argv[i] = strdup("hello world!");

谢谢,我不知道为什么我错过了。我知道这一定是件很愚蠢的事!
#define size 20
char **argv = malloc(size * sizeof(char *));
if (argv == NULL) {
    fprintf(stderr, "Allocation failed!");
    return 1;
}
for (int i=0; i<size; i++)
    argv[i] = strdup("hello world!");
char **temp = realloc(old_ptr, new_size);
if (temp != NULL)
    old_ptr = temp;