C++ 非常简单的问题我还在学习如何做链表
我确信我错过了一些非常简单的东西,但它一直告诉我抛出了一个异常:读取访问冲突。温度为空ptr。我不知道从这里到哪里去。感谢您抽出时间。错误消息temp was nullptr对我来说似乎是不言自明的。显示的代码中只有一个temp,即replace。在访问temp的成员之前,您不能验证temp是否为NULL。事实上,replace通常不会正确循环。它不会在到达所需节点时停止循环,也不会处理pos超出列表边界的情况 此外,打印输出方法正在销毁列表,因为它正在修改头成员。它应该使用非破坏性循环 尝试类似以下内容: 结构节点{ int数据; Node*next=nullptr; 节点值:数据值{} }; 班级名单{ 私人: Node*head=nullptr;//使其成为emty 节点*tail=nullptr; 公众: 列表=默认值; ~List{ 节点*tmp=head,*next; 而tmp{ next=tmp->next; 删除tmp; tmp=下一个; } } //删除,直到您准备好正确实施它们。。。 Listconst List&=delete; ListList&&=delete; 列表和运算符=常量列表和=删除; 列表和运算符=列表和运算符=删除; // 无效插入项{ Node*tmp=新节点{entry}; 如果!头 水头=tmp; 其他的 tail->next=tmp; tail=tmp; } 无效打印输出常数{ 节点*tmp=头部; 而tmp{ cout data;//统计数据 tmp=tmp->next;//转到下一个节点 } } 无效替换int pos,int条目{ 如果pos<0,返回; 节点*温度=头部; 当pos>0时(&T){ 温度=温度->下一步; -pos; } 中频温度{ 温度->数据=输入; } } };C++ 非常简单的问题我还在学习如何做链表,c++,linked-list,C++,Linked List,我确信我错过了一些非常简单的东西,但它一直告诉我抛出了一个异常:读取访问冲突。温度为空ptr。我不知道从这里到哪里去。感谢您抽出时间。错误消息temp was nullptr对我来说似乎是不言自明的。显示的代码中只有一个temp,即replace。在访问temp的成员之前,您不能验证temp是否为NULL。事实上,replace通常不会正确循环。它不会在到达所需节点时停止循环,也不会处理pos超出列表边界的情况 此外,打印输出方法正在销毁列表,因为它正在修改头成员。它应该使用非破坏性循环 尝试类
我也认为打印输出是问题所在。你不想改变主意。使用一个单独的变量来迭代而不是head。就像上面提到的其他变量一样,问题似乎是打印输出方法破坏了列表,因为您直接使用全局变量head。始终将其复制到temphead上并使用它。还可以将使用此类列表的主方法和其他代码行放入示例中。最终,问题是,正如@RemyLebeau在第一条注释中提到的,您没有检查temp变量的Null值。由于tail->next为null,表示列表的结尾,因此您应该检查它,因为pos值可能表示列表结尾以外的位置。编写的代码不能产生您得到的错误,因为您的示例没有运行任何显示的代码。您需要包含实际运行以生成错误的代码,否则上面的一切都只是推测。代码中存在一些明显的问题,但是您得到的具体错误是由于您使用代码的方式造成的,您已经忽略了这些问题。
class Node {
public:
int data;
Node* next;
};
class List {
private:
Node* head = NULL; //makes it emty
Node* tail = NULL;
public:
void insert(int entry) {
Node* tmp = new Node;
tmp->data = entry;
tmp->next = NULL;
if (head == NULL)
{
head = tmp;
tail = tmp;
}
else
{
tail->next = tmp;
tail = tail->next;
}
}
void printout() {
while (head!= NULL) {
cout << head->data; // counts the data
head = head->next; // goes to the next node
}
}
void replace(int pos, int entry) {
Node* temp;
temp = head;
int count = pos;
for (int i = 0; i < count; i++) {
if (i == count) {
temp->data = entry;
}
else {
temp = temp->next;
}
}
}
};