我写了一个小控制台程序,它将单词存储在一个数组中,用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/