-2
#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 でこのプログラムを実行しているときに、

4

2 に答える 2

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;

もちろん。

于 2012-08-27T22:05:45.377 に答える
1

NULL ポインターを介してデータにアクセスしているようです。エラーでわかります:

Access violation reading location 0x0000004

NULL に近い場所を読み取ったというエラーが発生した場合は、通常、NULL ポインターを介してメンバー変数にアクセスしようとしていることを意味します。位置が 0x4 であるため、そのメンバーのオフセットは、オブジェクトの先頭から 4 である可能性があります。

あなたが持っているのはこれだけstructです:

struct node{
int value;
struct node *link;
};

ここでvalueは、オフセット 0x0 にあり、オフセット 0x4 にあるため、NULL ポインターを介してメンバーlinkにアクセスしようとしている場所でエラーが発生します。link

于 2012-08-27T21:54:06.987 に答える