C语言 添加节点到全局链表导致崩溃



我试图将项目添加到链表。代码可以编译,但是当我执行程序时,在添加第一个节点之前它崩溃了。代码看起来不错,但我一定是遗漏了什么。

代码使用了一个全局链表,这是解决这个问题所必需的。我想我对它的使用可能是导致崩溃的原因。

c

#include <stdio.h>
#include <stdlib.h>
#include "LinkedList.h"
int main (int argc, char* argv[])
{
    LinkedList *canQueue;
    int ii;
    createList();
    FILE* f;
    f = fopen(argv[1], "r");
    if(f==NULL) 
        {
        printf("Error: could not open file");
        return 0;
        }

    for(ii = 0; ii < 10; ii++)
        {
        TinCan* tempCan = malloc(sizeof(TinCan));
        fscanf(f, " label_%d", &tempCan->label); /*Read info from file into label field*/
        insertLast(canQueue, tempCan); /*Inserts the new can into linked list*/
        }
    return 0;
}

LinkedList.h

typedef struct TinCan
    {
    int label;
    } TinCan;
typedef struct Node
    {
    TinCan* data;
    struct Node *next;
    } Node;
typedef struct LinkedList
    {
    Node *head;
    } LinkedList;

void insertLast(LinkedList* list, TinCan *newData);
void createList();
extern LinkedList* canQueue;

LinkedList.c

#include <stdio.h>
#include <stdlib.h>
#include "LinkedList.h"
LinkedList *canQueue;
void createList() /*creates empty linked list*/
  {
    canQueue = malloc(sizeof(LinkedList));
    canQueue->head = NULL;
  }
void insertLast(LinkedList* list, TinCan *newData)
    {
    Node* newNode = malloc(sizeof(Node));
    newNode->data = newData;
    newNode->next = NULL;
    if(list->head==NULL)
        {
        list->head=newNode;
        }
        else
            {
            Node* temp;
            temp = list->head;
            while(temp->next!=NULL)
                {
                temp = temp->next;
                }
             temp->next = newNode;
            }
  printf("Added to end");
  }

根据您的响应,您需要从main中删除此声明:

LinkedList *canQueue;

它正在遮蔽全局canQueue,这意味着稍后当您调用insertLast时:

insertLast(canQueue, tempCan);

相关内容

  • 没有找到相关文章

最新更新