首页 文章

c编程中的分段故障链表

提问于
浏览
-1

当我运行它们时,以下功能之一导致分段错误 . 对他来说,他们看起来应该工作 . 我怀疑它与我使用malloc的方式有关 . 如果有人能指出哪个文件产生错误,我将永远感激不尽 .

这些功能非常自我解释 . 第一个从文件读取和int,并将包含int的节点添加到链表的开头 . 第二个做同样的事情,但将节点添加到最后 . 第三个删除链表中的第三个节点,最后一个删除最后一个节点 .

LinkedList readAndAddToStart(LinkedList list, FILE *inputFile) {
    LinkedList head;
    head = (LinkedList)malloc(sizeof(LinkedList));
    int num;
    fscanf(inputFile, "%d", &num);
    head->data = num;
    head->next = list;
    return head;
}

LinkedList readAndAddToEnd(LinkedList list, FILE *inputFile) {
    LinkedList addNode;
    addNode = (LinkedList)malloc(sizeof(LinkedList));
    LinkedList head;
    head = list;
    int num;
    fscanf(inputFile, "%d", &num);
    addNode->data = num;
    addNode->next = NULL;
    while (list->next != NULL) {
      list = list->next;
      }
    list->next = addNode;
    return head;
    }

LinkedList deleteFirst(LinkedList list) {
    LinkedList temp;
    temp = list;
    if (list != NULL) {
      list = list->next;
      free(temp);
      temp = NULL;
    }
    return list;
  }
LinkedList deleteLast(LinkedList list) {
    LinkedList head;
    head = list;
    if (list != NULL) {
      while (list->next->next != NULL) {
        list = list->next;
      }
      free(list->next);
      list->next = NULL;
    }
    return head;
  }

我的结构看起来像这个BTW

struct ListNode {
  int data;                                                
  struct ListNode *next;          
};


typedef struct ListNode *LinkedList;

1 回答

  • 2

    如果 list 为空, readAndAddToEnd 将崩溃 . 如果列表只有一个元素, deleteLast 将崩溃 .

相关问题