程序由于为链表创建推送功能而崩溃

时间:2018-08-02 15:30:59

标签: 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;
}

2 个答案:

答案 0 :(得分:1)

一个问题是,您在Node的定义中new编辑过的oldHead永远不会delete d。由于您在创建后立即将oldHead设置为head,因此建议您将其定义为:

Node* oldHead = head;

主要问题是您delete newHead,现在是head指向的对象。因此,当您打印head时,您正在读取无效的数据。

我强烈建议您将资源处理工作留给std::shared_ptr之类的对象,而不要new自己和delete自己。

答案 1 :(得分:1)

我不确定我是否理解你的问题。

您的固定方法:

void Push( const int val )
{
  Node* newNode { new Node };
  newNode->value = val;
  newNode->next = head;
  head = newNode;
}

详细了解链接列表操作here。您不需要双向链表即可实现堆栈-只需在一端推送/弹出。

[编辑]

我没有注意到您使用的是双向链接列表(这就是为什么需要完整/可验证的示例)的原因。如我所说,对于堆栈实现,单链列表就足够了。