gpt4 book ai didi

c++ - 链表程序崩溃

转载 作者:行者123 更新时间:2023-11-28 05:32:08 25 4
gpt4 key购买 nike

好吧,我正在尝试用很少的代码编写一个链表(一个非常简单的链表)。这是我的代码:

#include <iostream>

using namespace std;

class node
{
public :

int data = 0;

node* next;
};

node node_obj;

int main()
{
node* head;
node* node_pointer = head;
node_pointer = node_obj.next;
node_pointer->data = 4;
node_pointer = node_obj.next;
node_pointer->data = 5;
node_pointer = node_obj.next;
node_pointer->data = 6;
node_pointer = node_obj.next;

return 0;
}

我一开始只是想让它工作,这就是为什么没有添加、打印或删除功能。

无论如何,每次我运行该程序时它都会崩溃,并且我会收到错误代码 C0000005。

据我所知,这是一个指示内存访问冲突的错误,但我找不到解决方案。更新:我更改了我的代码,现在它看起来像这样(仅包括更改的部分):

class node
{
public :
node();
int data = 0;
node* next;
};
node::node()
{
next = new node;
}

所以现在我有一个初始化的"new"指针,错误代码更改为 c00000fd

最佳答案

首先,在提出此类问题之前,您应该使用调试器。你代码中的问题是:

node node_obj;

int main()
{
node* head;
node* node_pointer = head; // Warning: dead storage. You never use the value you initialized here.
node_pointer = node_obj.next; // node_obj.next was never initialized, so now node_pointer points nowhere.
node_pointer->data = 4; // And here you use nowhere-pointing pointer to
// access structure member. According to the Standard,
// it's [undefined behavior][1] which in practice usually leads to application crash.
// All subsequent lines suffer from the same issue.
node_pointer = node_obj.next;
node_pointer->data = 5;
node_pointer = node_obj.next;
node_pointer->data = 6;
node_pointer = node_obj.next;

return 0;
}

可能你想写这样的东西:

node *head;

int main()
{
head = new node;
node *node_pointer = head;
node_pointer->data = 4;
node_pointer->next = new node;
node_pointer = node_pointer->next;
node_pointer->data = 5;
node_pointer->next = new node;
node_pointer = node_pointer->next;
node_pointer->data = 6;
node_pointer->next = nullptr; // List end marker.
return 0;
}

关于c++ - 链表程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39223247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com