c++ - 在双向链表的尾部插入

标签 c++ linked-list nodes doubly-linked-list

我是第一次使用链表,必须创建一个可以在双向链表末尾插入节点的函数。到目前为止我已经

void LinkedList::insertAtTail(const value_type& entry) {
    Node *newNode = new Node(entry, NULL, tail);
    tail->next = newNode;
    tail = newNode;
    ++node_count;
}

Node 类接受一个要存储的值,一个指向下一个指向的指针的值,以及一个指向该顺序的前一个指针的值。每当我尝试在此处插入一个节点时,我都会收到一条错误消息,指出存在未处理的异常,并且在写入位置 0x00000008 时存在访问冲突。

我不完全确定这里出了什么问题,但我认为它与基于错误消息取消引用空指针有关。如果您能帮助我解决这个问题,我将不胜感激。

编辑:

早该说清楚了,tail是指向链表最后一个节点的指针。 tail->next 访问最后一个节点的下一个变量,在函数运行之前,该变量指向 NULL,但在它执行之后应该指向创建的新节点。

最佳答案

tail 最初指向哪里?如果它为 NULL,那么您将在尝试插入第一个元素时取消引用空指针。

如果在取消引用之前测试 tail 是否有帮助?

void LinkedList::insertAtTail(const value_type& entry) {
    Node *newNode = new Node(entry, NULL, tail);
    if (tail)
        tail->next = newNode;
    tail = newNode;
    ++node_count;
}

如果 tail 为 null 且 offsetof(Node, next) 为 8,这将解释访问冲突,因为 tail->next 将位于地址 0x00000000 + 8,即 0x00000008,因此分配给 tail->next 将尝试写入该地址的内存,这正是您看到的错误。

关于c++ - 在双向链表的尾部插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12791186/

相关文章:

c++ - 为什么 make 不断重新编译所有对象?

c++ - 无法在 eclipse helios 中使用静态库创建 cpp 项目

c++ - 无法包含 msclr\marshal_cppstd.h - _This_conversion_is_not_supported

c - 链表 C - 添加节点后仅打印最后一个值

c++ - 构建LinkedList时如何调整头尾指针

c - 包含节点的简单 C 编程代码可以运行,但会在代码块上产生错误

C++ 传递由参数确定的动态数组

c - 无法反转链表 - C 语言

java - 通过 vector 列表查找路径

python - networkx - 使用两个列表绘制不同颜色的节点