Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 非常简单的问题我还在学习如何做链表_C++_Linked List - Fatal编程技术网

C++ 非常简单的问题我还在学习如何做链表

C++ 非常简单的问题我还在学习如何做链表,c++,linked-list,C++,Linked List,我确信我错过了一些非常简单的东西,但它一直告诉我抛出了一个异常:读取访问冲突。温度为空ptr。我不知道从这里到哪里去。感谢您抽出时间。错误消息temp was nullptr对我来说似乎是不言自明的。显示的代码中只有一个temp,即replace。在访问temp的成员之前,您不能验证temp是否为NULL。事实上,replace通常不会正确循环。它不会在到达所需节点时停止循环,也不会处理pos超出列表边界的情况 此外,打印输出方法正在销毁列表,因为它正在修改头成员。它应该使用非破坏性循环 尝试类

我确信我错过了一些非常简单的东西,但它一直告诉我抛出了一个异常:读取访问冲突。温度为空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; } 中频温度{ 温度->数据=输入; } } };
我也认为打印输出是问题所在。你不想改变主意。使用一个单独的变量来迭代而不是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;
            }
        }
    }
};