我尝试在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");
}
更改此内容
p=p->next=NULL;
对此
p->next=NULL;
在代码中,当您到达行时
p->next=new linklist;
p 始终为空。调试器应该告诉你这一点。事实上,在你修复这段代码之前,我会尝试再次使用调试器,这次看看 p 的值在你运行程序时是如何变化的。这将是学习如何使用调试器的好课。