-2

C ++でn要素のリンクリストを作成しようとしています。

しかし、私はエラーメッセージを受け取りました:

linkedlist.exe の 0x00D0345E で未処理の例外: 0xC0000005: アクセス違反の書き込み場所 0x00000004。

理由は何ですか?

#include <iostream>
using namespace std;

struct linklist
{
    int data;
    linklist *next;
};

void Create_linklist(linklist &l,int n) // with n element
{
    linklist *phead,*p;
    int i=0;
    phead=p=NULL;
    while (i<n)
    {
        if (phead==NULL)
        {
            phead=new linklist;
            p=phead;
        }
        else
        {
            p->next=new linklist; //--> Seem error this line
            p=p->next;
        }
        cout<<"Input value "<<i+1<<": ";
        cin>>p->data;
        i++;
        p=p->next=NULL;
    }
}

void Outer_list(linklist l)
{
    linklist *p=new linklist;
    if (p!=NULL)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
}
void main()
{
    linklist list;
    Create_linklist(list,5);
    Outer_list(list);
    system("pause");
}
4

1 に答える 1

2

これを変える

p=p->next=NULL;

これに

p->next=NULL;

行に到達したときのコード内

p->next=new linklist;

p は常に NULL です。デバッガーはこれを教えてくれるはずです。実際、このコードを修正する前に、もう一度デバッガーを使用してみます。今回は、プログラムを実行すると p の値がどのように変化するかを確認します。デバッガーの使用方法を学習するための良いレッスンになります。

于 2013-10-04T04:01:59.507 に答える