Я написал основную c функцию для рекурсивного освобождения структуры данных tr ie в C:
// Root pointer is passed as arg in initial call
void destroy(node *trav)
{
for (int i = 0; i < N; i++)
{
if (trav->children[i])
{
destroy(trav->children[i]);
}
}
free(trav);
}
Эта функция прекрасно работает с любым меньшим файлом словаря. Самый большой файл, который программа успешно загрузила и выгрузила, содержал 134 480 слов.
Однако он вызывает ошибку сегментации при освобождении большего значения tr ie. Файл большего размера, который вызывает ошибку сегментации, содержит 506 915 слов.
Сообщение об ошибке, выдаваемое Valgrind, гласит: «Недопустимое чтение размера 8», за которым следуют несколько обратных и наконец; "Адрес не в стеке, mallo c 'd или (недавно) free'd".
Что может быть причиной этого?