我的链接列表程序在代码块编译器(X0000000005)中以状态-1073741819终止
My linked lists program terminated with status -1073741819 In Code blocks compiler(x0000000005))
这是程序
#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;
}
我运行该程序,并显示
流程返回-1073741819(0xc0000005)执行时间:6.720 S
我真的不知道为什么。我认为语法是正确的请检查上面的程序,并告诉我该怎么做。我是一个初学者,我对链接列表的了解不多
首先,您需要了解通过价值与通过参考的传递。在前一种情况下,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
}
在您的程序中,您按值传递header
:
void insert_begining(list header,int item){
// ....
header=p; // Only modifying the local var!
}
我会做一些事情:首先,摆脱类型。这是C ,但您没有使用课程,所以我认为您还没有学到它们。而是创建一个链接列表结构:
struct node
{
int data;
node *next;
};
struct linked_list {
struct node *head;
linked_list() : head(nullptr) {} // ctor
};
不再需要打字,现在您可以轻松地通过参考来传递。例如:
void insert_begining(linked_list& list, int item){
// removed for brevity
p->next = list.head;
list.head = p;
}
当您声明标题变量时,它不会初始化为null。在C 中声明时,通常不会由编译器初始化变量。
所以当您拨打电话
时insert_end(header, 500);
在函数内部执行其他块,因为标题不是空的,而是垃圾值。罪魁祸首是:
while(q->next!=NULL);
您无法评估 Q->下一个,因为Q指向随机内存位置,因此segfault。您需要在访问变量之前分配给变量。
因此,在您的主函数中添加此信息:
list header = NULL;
为此,您可能想检查Blupix对其他问题的评论。如果编译器支持C 11
相关文章:
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- std::future_error:无关联状态
- 如何避免LED在循环状态变化中闪烁?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 试图在崇高中奔跑. 错误 已发生: 收集2.exe: 错误: ld 返回 1 退出状态
- 在容器上移动分配:以前包含的对象的状态
- collect2:错误:ld 返回 1 个退出状态未定义的引用
- 具有动态大小的特征矩阵的默认初始状态
- 如何从Clojure调用C++程序,以使程序保持打开状态?
- 我的链接列表程序在代码块编译器(X0000000005)中以状态-1073741819终止