#include<stdio.h>
#include<conio.h>
#include<malloc.h>
struct node{
int value;
struct node *link;
}*p,**q,*r,*temp;
static int n=0;
void append(struct node **,int);
main(){
append(&p,1);
append(&p,2);
append(&p,3);
append(&p,4);
append(&p,5);
printf("Entered linked list :\n");
//display(p);
getch();
}
void append(struct node **q,int num){
if(n==0){
struct node *temp=(struct node*)malloc(sizeof(struct node));
temp->value=num;
temp->link=NULL;
*q=p;
n++;
}
else{
temp=*q;
while(temp->link!=NULL)
temp=temp->link;
r=(struct node*)malloc(sizeof(struct node));
r->value=num;
r->link=NULL;
temp->link=r;
//q=p;
}
}
有人可以告诉我为什么这条消息:
在linkedlist.c.exe中的0x00fa14ea处未处理的异常:0xC000005:访问冲突读取位置0x0000004
在Visual Studio 2010中运行此程序时即将到来?
答案 0 :(得分:1)
看起来您正在通过NULL指针访问数据。您可以通过错误判断:
Access violation reading location 0x0000004
当您收到错误消息,表示您已读取接近NULL的位置时,通常意味着您尝试通过NULL指针访问成员变量。由于该位置是0x4,因此该成员的偏移量可能是从对象开始的4。
你唯一的struct
是:
struct node{
int value;
struct node *link;
};
此处,value
将位于偏移量0x0处,link
将位于偏移量0x4处,因此错误将位于您尝试通过NULL访问link
成员的位置指针。
答案 1 :(得分:1)
在
if(n==0){
struct node *temp=(struct node*)malloc(sizeof(struct node));
temp->value=num;
temp->link=NULL;
*q=p;
n++;
}
您将*q
设置为全局指针p
(NULL
),您的意思是
*q = temp;
当然。