我正在尝试在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 ......它只是继续前进。 我现在不知道如何修复它。
答案 0 :(得分:4)
在您的主要功能中,初始化:
linkedlist *hd = NULL;
答案 1 :(得分:2)
linkedlist *hd;
这可能会导致错误。因为最初它可能有一些garbage
值。所以你必须为NULL linkedlist *hd = NULL;
答案 2 :(得分:1)
我认为异常的原因是hd
是一个未初始化的变量。在您的环境中,它似乎带有值0xcccccccc
。支票if(!*head)
可能从未评估为`true
。