程序在为链表创建推送函数时崩溃



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

请帮忙。

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;

不过,的主要问题deletenewHead,这就是head所指向的。因此,当您打印head时,您读取的是无效数据。

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

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

您的固定方法:

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

请在此处阅读有关链接列表操作的更多信息。您不需要双链表来实现堆栈,只需要在一端推送/弹出即可。

[EDIT]

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

最新更新