链接列表 - 访问冲突......在哪里?

时间:2013-04-23 05:52:30

标签: c visual-studio-2010

我正在尝试在C中实现链接列表:

#include <stdio.h>
#include <stdlib.h>

typedef struct el{
    int number;
    struct el *next;
} linkedlist;

linkedlist* newel(){
    linkedlist *newelement = (linkedlist*)malloc(sizeof(linkedlist));
    newelement->number = 10;
    newelement->next=NULL;
    return newelement;
}

void add(linkedlist **head, linkedlist *item){
    if(!*head){
        *head = item;
    }
    else{
        item->next = *head;
        *head = item;
    }
}

void prnt(linkedlist *head){
    while(head!=NULL){
        printf("%d\n", head->number);
        head=head->next;
    }
}

int main(){

    linkedlist *hd;
    add(&hd,newel());
    add(&hd,newel());
    add(&hd,newel());
    prnt(hd);

    system("PAUSE");

    return 0;
}

我得到了:

Unhandled exception at 0x010c14e9 in test.exe: 0xC0000005: Access violation reading location 0xcccccccc.

我尝试调试,问题出在prnt函数中。当头指向最后一个元素时,似乎它看不到NULL ......它只是继续前进。 我现在不知道如何修复它。

3 个答案:

答案 0 :(得分:4)

在您的主要功能中,初始化:

linkedlist *hd = NULL;

答案 1 :(得分:2)

linkedlist *hd;这可能会导致错误。因为最初它可能有一些garbage值。所以你必须为NULL linkedlist *hd = NULL;

答案 2 :(得分:1)

我认为异常的原因是hd是一个未初始化的变量。在您的环境中,它似乎带有值0xcccccccc。支票if(!*head)可能从未评估为`true