1

我正在尝试在 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 函数中。当 head 指向最后一个元素时,它似乎没有看到 NULL ......它只是在继续。我现在不知道如何修复它。

4

3 回答 3

4

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

linkedlist *hd = NULL;
于 2013-04-23T05:59:38.933 回答
2

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

于 2013-04-23T06:02:02.163 回答
1

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

于 2013-04-23T06:04:29.513 回答