-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 回答