我写了一个小控制台程序,它将单词存储在一个数组中,用char** test_tab表示,然后打印出来。
只要程序不经过条件realloc()(例如,如果我将size增加到1000),它就可以正常工作。
但是,如果调用realloc()则程序在数组打印期间崩溃,可能是因为内存在其中混乱。

#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>

char* get_word();

int main(int argc, char* argv[])
{
    size_t size = 100;
    size_t nb_pointer = 0;
    char** test_tab = malloc(size * sizeof *test_tab);
    char** temp_tab;

    while((*(test_tab + nb_pointer) = get_word()) != NULL)
    {
        nb_pointer++;
        if(nb_pointer >= size)
        {
            size += 100;
            temp_tab = realloc(test_tab, size);

            if(temp_tab != NULL)
                test_tab = temp_tab;
            else
            {
                free(test_tab);
                exit(1);
            }
        }
    }

    for(nb_pointer = 0; *(test_tab + nb_pointer) != NULL; nb_pointer++)
        printf("%s\n", *(test_tab + nb_pointer));

    free(test_tab);

    return 0;
}

有人能解释一下我在这里做错了什么吗?谢谢。

最佳答案

重新分配中的内存量计算不正确。

       temp_tab = realloc(test_tab, size);

应该是
       temp_tab = realloc(test_tab, size * sizeof *test_tab);

关于c - 由于重新分配,执行时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34264087/

10-10 16:57