c++ - 程序因为链表创建推送功能而崩溃

标签 c++ linked-list stack

我正在尝试使用链表实现堆栈。我的程序不断崩溃,在尝试打印新的链表时,它打印了一个无符号整数。我的打印功能工作正常,所以就是下面这个功能。

请帮忙。

void LinkedList::Push (int val)
{
    Node* newHead = new Node;
    Node* oldHead = new Node;
    newHead->value = val;
    oldHead = head;
    head = newHead;
    oldHead->prev = head;
    head->next = oldHead;
    delete newHead;
}

最佳答案

一个问题是您在 oldHead 的定义中 newNode 永远不会deleted。由于您在创建后立即将 oldHead 设置为 head,因此我建议您这样定义:

Node* oldHead = head;

不过,主要问题是您删除 newHead,它现在是head 指向的.因此,当您去打印 head 时,您正在读取无效数据。

我强烈建议将资源处理留给像 std::shared_ptr 这样的对象。而不是 newing 和 delete 自己。

关于c++ - 程序因为链表创建推送功能而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51657360/

相关文章:

c++ - 用现代 C++ STL 数据结构替换旧的 C 风格数组

C++ 模板 : Specialized member function to resolve case of ambiguous overload in primary template

go - 为什么此链表未添加新节点?

c - 如何在运行时创建单链表并对其进行排序?

recursion - 如何实现 "stackless"解释型语言?

c++ - VkDescriptorBufferInfo 'range' 字段是否需要是 VkPhysicalDeviceProperties 'limits.minUniformBufferOffsetAlignment' 字段的倍数?

c++ - 从 C++ 到 Swift 的 CoreAudio 东西

c - 链表的最大限制

c# - 困惑: instance creation of c# class in c++

c - 与动态数组的堆栈: segfaults when popping value multiple times