C++ 我的链表程序在代码块编译器(x0000000005)中以状态-1073741819终止
这是节目C++ 我的链表程序在代码块编译器(x0000000005)中以状态-1073741819终止,c++,linked-list,runtime-error,C++,Linked List,Runtime Error,这是节目 #include <iostream> #include <stdio.h> #include <conio.h> #include <stdlib.h> using namespace std; struct node { int data; node *next; }; typedef node *list; bool create(list header){ return header==NULL; }
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
struct node
{
int data;
node *next;
};
typedef node *list;
bool create(list header){
return header==NULL;
}
void insert_begining(list header,int item){
node*p;
p=new(node);
if (p=NULL)
{
return;
}
p->data=item;
p->next=header;
header=p;
}
void insert_end(list header,int item){
list p,q;
p=new(node);
p->data=item;
p->next=NULL;
if (header==NULL)
{
header=p;
}
else
{
q=header;
while(q->next!=NULL){
q=q->next;
}
q->next=p;
}
}
void print_list(list header){
node* p;
p=header;
while(p->next!=NULL){
cout<<p->data<<endl;
p=p->next;
}
}
int main(){
list header;
create(header);
insert_end(header,500);
insert_end(header,600);
insert_end(header,4);
insert_end(header,6);
print_list(header);
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
结构节点
{
int数据;
节点*下一步;
};
typedef节点*列表;
bool创建(列表标题){
返回头==NULL;
}
无效插入开始(列表标题,整数项){
节点*p;
p=新(节点);
如果(p=NULL)
{
返回;
}
p->data=项目;
p->next=标题;
标题=p;
}
无效插入\u结束(列表标题,整数项){
列表p,q;
p=新(节点);
p->data=项目;
p->next=NULL;
if(头==NULL)
{
标题=p;
}
其他的
{
q=标题;
while(q->next!=NULL){
q=q->next;
}
q->next=p;
}
}
作废打印列表(列表标题){
节点*p;
p=收割台;
while(p->next!=NULL){
cout首先,您需要了解传递值与传递引用。在前一种情况下,传递var的副本,在后一种情况下传递实际var。例如:
void f1(int x) { // Pass by value
x = 1;
}
void f2(int& x) { // Pass by reference
x = 2;
}
int main() {
int y = 0;
f1(y);
// y is still 0
f2(y);
// y is now 2
}
在程序中,您通过值传递标题
:
void insert_begining(list header,int item){
// ....
header=p; // Only modifying the local var!
}
我会做一些事情:
首先,去掉TyEndof。这是C++,但是你不使用类,所以我想你还没有学习它们。相反,创建链表结构:
struct node
{
int data;
node *next;
};
struct linked_list {
struct node *head;
linked_list() : head(nullptr) {} // ctor
};
不再需要typedef,现在您可以轻松地通过引用传递。例如:
void insert_begining(linked_list& list, int item){
// removed for brevity
p->next = list.head;
list.head = p;
}
当你声明头变量时,它没有初始化为NULL。C++中
声明时,编译器通常不会初始化变量
所以当你打电话的时候
insert_end(header, 500);
在函数内部执行else块,因为头不是NULL而是垃圾值。罪魁祸首是:
while(q->next!=NULL);
您无法计算q->next,因为q指向随机内存位置,因此存在segfault。您需要在访问变量之前对其赋值
因此,在主函数中添加以下内容:
list header = NULL;
除此之外,您可能还想查看BLUPIX对其他问题的评论。
如果编译器支持C++111)if(p=NULL)
-->if(p=NULL),也可以使用nullptr而不是NULL
2)header=p;
不更改调用方变量。3)列表头;
:头
未初始化。我是一名初学者,我对链接列表真的不太了解-如果不了解您要编写的内容,编写代码将很困难。请阅读链接列表。如果您搜索go,将有很多可用的链接对于您得到的特定错误,@BLUEPIXY指出。您正在通过值传递头
参数,因此无论何时您认为您正在分配给它,实际上您都没有。