c - C编程中的段错误链表

标签 c linked-list

以下函数之一在我运行时会导致段错误。对我来说,它们看起来应该有效。我怀疑这与我使用 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;
  }

顺便说一句,我的结构看起来像这样

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


typedef struct ListNode *LinkedList;

最佳答案

如果 list 为空,

readAndAddToEnd 将崩溃。如果列表只有一个元素,deleteLast 将崩溃。

关于c - C编程中的段错误链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27339450/

相关文章:

c - 从 C 中的 .txt 文件中读取 Int 和 Float 值的混合

c - 为什么当我尝试编辑此链接列表时出现段错误

c - 如何使用ffmpeg降低视频的分辨率?

c - 段错误问题

c - 如何使用malloc或其他函数在Ram中分配所需的地址?

java - 在链表开头插入节点

go - 如何从 Go 列表中检索结构指针

c - 任务系统问题 - 任务将运行两次(重新发布一次)

C:二维数组的大小

XY 平面上的点的计算