Итак, я делаю очень базовое c C упражнение со связанным c связанным списком. Я продолжаю получать ошибку сегментации, и я не очень уверен, о чем она может быть.
В основном моя программа успешно добавляется, и тогда я не могу точно сказать, являются ли методы удаления или поиска причиной ошибки.
Структура узла:
struct Node {
char * word ;
struct Node * next ;
} ;
Я добавлю добавление, поиск и удаление, потому что остальная часть кода принадлежит моим профессорам и работает все, это просто проблема, которую я создал.
add
void add_ll( struct Node * anchor, char * word ) {
// given a pointer to the anchor of the list, and a word, add the word
// to the list, does not matter where (except don't replace the anchor)
struct Node * newNode = (struct Node *) malloc(sizeof(struct Node)) ;
newNode -> word = word;
newNode -> next = anchor -> next;
anchor -> next = newNode;
if(anchor == NULL){
anchor -> next = NULL;
anchor -> word = word;
}
return ;
}
find
struct Node * find_ll(struct Node * anchor, char * word) {
// given a pointer to the anchor of the list, and a word, search
// the list for the word. return the pointer to the with the word, if found,
// or NULL if not found
if (anchor -> word == NULL)
{
struct Node * node = new_ll();
return node;
}
while(anchor != NULL)
{
if(anchor -> word == word)
return anchor;
else
anchor = anchor -> next;
}
return NULL ;
}
удалить
void remove_ll( struct Node * anchor, struct Node * node_to_remove ) {
// given a list anchor, and a pointer to a node in the list (but not the anchor)
// do pointer surgery to remove the node, and free it.
// sanity checks
assert(node_to_remove) ;
assert(node_to_remove!=anchor) ;
while(anchor != NULL)
{
struct Node * temp = anchor;
struct Node * prev = anchor;
while(temp != NULL && temp != node_to_remove)
{
prev = temp;
temp = temp -> next;
}
prev -> next = temp -> next;
free(temp);
}
return ;
}
То, что я пытался увидеть, исправит ли оно, включает изменение
while(temp != NULL && temp -> next != node_to_remove)
на while(temp != NULL && temp != node_to_remove)
, если у него есть что-то делать с доступом к информации слишком рано, но это ничего не исправило.
Также это не классная работа в классе, если это влияет на вашу моральную помощь мне!
Так что мой вопрос в основном ... Что вызывает ошибку сегментации, и если это действительно единственная проблема, как я могу go исправить ее? Если вы заметили какие-либо другие ошибки, пожалуйста, укажите на них. Я был бы очень признателен! Если мне не хватает какой-либо информации, я тоже могу ее добавить! Все заголовки методов являются моими профессорами и не должны быть затронуты!