添加节点时单链表错误

时间:2014-04-30 16:48:57

标签: c singly-linked-list

我的问题是,当我第一次尝试将节点添加到我的单链表时,一切都在预料之中,但是当我想添加另一个节点时,我的程序崩溃了。好像我的错误是由于尝试写入0地址引起的。但是我似乎无法在我的代码中找到错误。我在使用malloc吗? 这是代码:

typedef struct linkedList
{
    int StudentId;
    char name[100];
    char dep[100];
    struct linkedList *next;
} LinkedList;

LinkedList *head = NULL;
LinkedList *current = NULL;

LinkedList *createList(int val, char name[], char dep[])
{
    LinkedList *ptr = (LinkedList *)malloc(sizeof(LinkedList));
    if (ptr == NULL)
    {
        printf("Node Creation Failed\n");
        return NULL;
    }
    ptr ->StudentId = val;
    strcpy(ptr -> name, name);
    strcpy(ptr ->dep, dep);
    ptr ->next = NULL;
    head = current = ptr;
    return ptr;
}

LinkedList *addToList (int val, char name[], char dep[])
{
    if (head == NULL)
    {
        return (createList(val, name, dep));
    }
    else
    {
        LinkedList *ptr = (LinkedList *)malloc(sizeof(LinkedList));
        if (ptr = NULL)
        {
            printf("Node Creation Failed\n");
            return NULL;
        }
        ptr -> StudentId = val;
        strcpy(ptr ->name, name);
        strcpy(ptr ->dep, dep);
        ptr -> next = NULL;
        current -> next = ptr;
        current = ptr;
        return ptr;
}

}

主要功能

: AddtoList(10, “ABC”, “ABC”); 调用createList,没问题但是 如果我再次使用AddtoList,程序崩溃,createList和AddtoList真的相似,无法弄清问题是什么。

1 个答案:

答案 0 :(得分:2)

更改

if (ptr = NULL)

if (ptr == NULL)

在您的情况下,ptr被分配到NULL,if中的表达式被评估为0。控制转到ptr -> StudentId = val;。它试图访问写保护的内存,因此崩溃。