Я пытаюсь освободить указатель на моем трие.
вот моя структура три
struct trie
{
int x;
trie *next[26];
};
trie *head;
trie *tmp;
и вот моя функция освобождения с помощью DFS
void deallocate(trie *cur)
{
for (int a=0; a<=25; a++)
{
if (cur->next[a] != NULL)
{
tmp = cur->next[a];
cur->next[a] = NULL;
deallocate(tmp);
}
}
free(cur);
}
и вот моя функция инициализации головы
void init()
{
head = new trie;
head->x = 0;
for (int a=0; a<=25; a++)
{
head->next[a] = NULL;
}
}
и после окончания программы я позвонил deallocate(head);
Я действительно плохо знаком с указателями, есть ли что-то не так с моей функцией освобождения? Спасибо
изменил размер массива и получил 🙂 кажется, что проблема не в указателе 🙂 всем спасибо
Ты используешь new
выделить память и free
чтобы освободить это. Единственная ошибка, которую я вижу, это то, что вы должны либо использовать new
с delete
, или же malloc
с free
,
Ваша функция неверна для пустого ввода. deallocate(NULL)
потерпит крах. Функции (особенно общие, которые составляют основу) должны быть самодостаточными и должны быть в состоянии охватить все возможные входные данные.
Deloclocate должен обрабатывать нулевой ввод
if (cur == NULL)
{
вернуть;
}
в начале функции
* голова должна быть объявлена как NULL при объявлении
trie * head = NULL;