将节点添加到全局链接列表导致崩溃

时间:2013-05-15 01:50:36

标签: c linked-list

我正在尝试将项目添加到链接列表中。代码编译好,但是当我执行程序时,它会在添加第一个节点之前崩溃。代码看起来不错,但我必须遗漏一些东西。

代码使用此问题所必需的全局链接列表。我认为我对它的使用可能是导致崩溃的原因。

的main.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");
  }

1 个答案:

答案 0 :(得分:1)

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

LinkedList *canQueue;

它影响全球canQueue,这意味着稍后您致电insertLast时:

insertLast(canQueue, tempCan);

你正在使用非指定的指针。