Member 13485641 Ответов: 1

Я получаю ошибку (ошибка фрагментации) в моем двусвязном списке


void DeleteNode()
{
struct node *current;
struct node *prev;
int found = 0;
int n;
prev = allocate();
current = allocate();
current = head;
prev = NULL;

printf("\nEnter the value to eliminate: ");
scanf("%d",&n);

if(head != NULL)
{
    //Assume list: 45,56,22,65
    //We want to delete 22
    while(current != NULL && found != 1)
    {
        if(current -> data == n)
        {
            if(current == head)
                {
                    head = head -> next;
                    head -> previous = NULL;
                }
            else if(current == tail)
                {
                    prev -> next = NULL;
                    tail = prev;
                }
            else
                {
                    prev -> next = current -> next; //
                    current -> next -> previous = prev; //
                }
            printf("\n %d was succesfully deleted from the list.\n",n);
            found = 1;
        }
        prev = current; //45,56,22
        current = current -> next; //56,22,65
        
    }
    if(found == 0)
        printf("\n%d is not found in the list!\n",n);
    else
    {
        free(prev);
    }
}
else
    printf("\nThe list is empty\n");

}


Что я уже пробовал:

Это мой код, я пытаюсь удалить номер из списка. Это двусвязный список. Проблема в том, что когда у меня есть только 1 номер в списке, и я пытаюсь удалить его, я получаю ошибку сегментации. В остальном это работает.*/

jeron1

Пройдя через это с помощью отладчика, вы довольно быстро узнаете, где лежат ваши проблемы, и это, вероятно, плохой указатель.

1 Ответов

Рейтинг:
1

Richard MacCutchan

if(current == head)
    {
        head = head -> next;
        head -> previous = NULL;
    }

Если это единственный пункт в списке, то head -> next будет NULL Таким образом, вторая линия вызовет ошибку сегментации.


CPallini

5.