#c #string #pointers #linked-list
#c #строка #указатели #связанный список
Вопрос:
В настоящее время я создаю программу на C, которая в основном представляет собой связанный список внутри связанного списка. Внутренний список-это символ, а внешний список-слова. К сожалению, у меня возникли проблемы с удалением некоторых внешних узлов (слов) и освобождением их памяти. Моя программа продолжает сбоить, и я понятия не имею, почему. Компилятор не выдает мне никаких предупреждений или ошибок, и я уже несколько часов ищу исправление. Любая помощь будет признательна всем, кто мог бы ознакомиться с кодом! Спасибо!
*void deleteWord (Node* Node, int index){ int counter = 0; if (Node == NULL) return; while (Node-gt;next != NULL amp;amp; counter != (index - 1)){ Node = Node-gt;next; counter ; } struct node* wordTemp = Node-gt;next; //Node-gt;next = Node-gt;next-gt;next; while (wordTemp-gt;word != NULL){ InnerNode* letterTemp = wordTemp-gt;word-gt;next; free(wordTemp-gt;word); wordTemp-gt;word = letterTemp; } free(wordTemp); return; }
Комментарии:
1. почему
counter != (index - 1)
?counter
Основан ли он на нуле иindex
на 1?2. чтобы я получил узел, который идет перед узлом, который я действительно хочу освободить, чтобы я мог связать его с тем, который идет после того, который я хочу освободить
3. хм, хорошо. Но если вы передадите индекс 0, вы получите последний узел в списке, вероятно, не то, что вы хотите. Вам тоже нужно разбираться с угловыми случаями.
Ответ №1:
Похоже, вы освобождаете узел-gt;далее (сохраненный в wordTemp), не переназначая его, по сути, разрывая ссылку в связанном списке, поэтому теперь узел-gt;gt;далее указывает на удаленную память.
Комментарии:
1. я связываю узел current с тем, который идет после того, который я хочу удалить. узел-gt;следующий становится узлом-gt;gt;следующий-gt;gt;gt;следующий, поэтому последовательно связываю предыдущий узел со следующим и делаю копию того, который я хочу освободить, называя его wordTemp