gpt4 book ai didi

c++ - 使用链表实现堆栈,调试断言失败

转载 作者:行者123 更新时间:2023-11-28 00:16:32 25 4
gpt4 key购买 nike

我目前正致力于使用 C++ 中的链表实现堆栈数据结构。我可以很好地编译所有内容,直到我测试我的“stack.push”方法时,当我收到调试断言失败错误时,我对如何开始修复它没有足够的知识。我刚开始在这里,所以我显然不能发布图片,但简而言之,它说:

Debug Assertion Failed!
Program...ual studio 2013/....~
File:f:/dd/vctools/crt/crtw32/misc/dbgdel.cpp
Line: 52
Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse

这是我的代码:Stack.h

#ifndef _STACK_H
#define _STACK_H

#include "LList.h"
typedef int ItemType;
class Stack{

public:
Stack();
~Stack();

int size() { return size_; }
void push(ItemType x);
ItemType pop();
ItemType top() { return top_; }

private:
ItemType top_;
void copy(const Stack &source);
int size_;
LList items_;

};
#endif _STACK_H

堆栈.cpp:

#include "Stack.h"

Stack::Stack()
{
size_ = 0;
ItemType top_ = NULL;
}

void Stack::push(ItemType x)
{
items_.append(x);
size_ += 1;
ItemType top_ = x;
}
ItemType Stack::pop()
{
ItemType top_ = size_ - 1;
size_ -= 1;
return items_.pop();
}

Stack::~Stack()
{
items_.~items_();
}

错误发生在编写分配堆栈然后尝试将数字压入堆栈的测试代码之后。任何帮助将不胜感激,如果我的帖子有任何格式问题,我深表歉意。

最佳答案

你的代码有几个问题:

  • 如另一个答案中所述,append 会将项目添加到列表的末尾(即,从堆栈的角度来看位于底部)而不是顶部。

  • 你对top的用法不一致,你应该决定它的意思。传统上,top 将保存或指向最后插入的元素。

  • 你有语法问题,你实际上是在为 top 重新声明一个新的局部变量,而不是使用类成员。
  • 当您显式调用包含的列表析构函数时,析构函数中存在内存损坏。

关于c++ - 使用链表实现堆栈,调试断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29952057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com