我试图在visual studio 2010中执行链表代码时遇到未处理的异常

时间:2012-08-27 21:48:54

标签: c

#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中运行此程序时即将到来?

2 个答案:

答案 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设置为全局指针pNULL),您的意思是

*q = temp;

当然。