Кажется, что не может сделать Valgrind счастливым.
Результат Valgrind:
== 21003 == Неверная запись размера 1 == 21003 == в 0x4C32E0D: strcpy (в / usr /lib/valgrind/vgpreload_memcheck-amd64-linux.so) == 21003 == by 0x40125E: загрузить (словарь. c: 111) == 21003 == 0x400964: основной (speller. c: 40) )
Неверная запись размером 8 == 22741 == при 0x40123E: загрузка (словарь. c: 107) == 22741 == по 0x400964: главная (speller. c: 40) == 22741 == Адрес 0x55cd9a0 составляет 32 байта, прежде чем нераспределенный блок размером 4 183 584 на арене «клиент»
Кажется, проблема в строке 110, которая является StrCpy в моей bool LOAD. Код как показано ниже - я не могу понять, почему существует недопустимая запись размером 1.
Другой вариант - n -> next = table [hashInt];
Я не понимаю, почему я Я получаю недопустимую запись.
bool load(const char *dictionary)
{
FILE *file = fopen(dictionary, "r");
if (file == NULL)
{
printf("error opening file");
return 1;
}
char word [LENGTH + 1];
while (fscanf(file, "%s\n", word) != EOF)
{
int hashInt = hash(word);
node *n = malloc(sizeof(n));
if (n == NULL)
{
unload();
return 1;
}
if (table[hashInt] == NULL)
{
table[hashInt] = n;
}
else
{
n -> next = table[hashInt];
table[hashInt] = n;
}
strcpy(n -> word, word);
wordLoaded++;
}
fclose(file);
return 0;
}