Я написал небольшую консольную программу, которая хранит слова в массиве, представленные char** test_tab
, а затем распечатайте их.
Программа работает прекрасно, пока он не проходит через условную realloc()
(например, если я увеличить size
к 1000
).
Но если realloc()
получится вызванным, программа выйдет из строя во время печати массива, возможно потому, что память там испортилась.Ошибка при выполнении из-за 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;
}
Может кто-то объясняет мне, что я делаю неправильно прямо здесь? Благодарю.
Хорошо, я вижу , Я также изменил свой цикл, чтобы увеличить «nb_pointer» перед тестом 'nb_pointer> = size', иначе можно добавить строку без достаточного количества выделенной памяти. – aurelienC