gpt4 book ai didi

c++ - 访问冲突 - 无法写入位置

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

我正在尝试为链表编写代码,但是当我尝试添加节点时,代码在 add() 函数的 while 循环之后立即卡在该行,报告访问冲突错误。怎么了?

#include<iostream>

template <class T>
class linkedlist
{
struct node
{
T data;
node *lp;
}*p;
public:
linkedlist();
void add(T t);
};

template<class T>
void linkedlist<T>::add(T t)
{
node *r,*q;
r = q = p;

while(p!= NULL)
{
q = p;
p = p->lp;
}

q->lp = new node;
q->lp->data = t;
p = r;
}

template<class T>
linkedlist<T>::linkedlist()
{
p = NULL;
}

int main()
{
linkedlist<int> l1;
l1.add(3);
}

最佳答案

您在构造函数中将 p 初始化为 NULL,然后尝试在 add 中取消引用它(通过 q ):

r = q = p;
// the while loop will not be executed as p == NULL
q->lp = new node;

您必须首先初始化 p - 要么在构造期间(在这种情况下,您的“空”列表在物理上不会是空的,因此您必须专门处理这个问题,例如在迭代/删除元素时) ,或者您应该在 add 中检查 p == null 的情况并以不同方式处理它。

旁注:p 应该指向您的 head 元素,因此使用它来遍历 add 中的列表,然后恢复其原始元素是有风险的值(存储在 r 中)。为什么不简单地让它始终保持原样,并使用 r 进行迭代?错误的机会减少了一次。

关于c++ - 访问冲突 - 无法写入位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9868270/

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