【问题标题】:Please help me to resolve my mistake in the following code. I used stack in it请帮助我解决以下代码中的错误。我在其中使用了堆栈
【发布时间】:2021-10-28 13:43:25
【问题描述】:

这是我在 geeksforgeeks 上的括号检查器问题的代码。编译后显示正确答案,但提交后显示分段错误。请帮我解决我的问题,我无法理解我的错误。

【问题讨论】:

  • 想想以})] 开头的输入。 st.top() 会是一个空堆栈吗?对,这是未定义的行为。
  • 请不要发布一般的文字图片,绝对不要发布代码。复制粘贴文本作为文本。也不要垃圾邮件无关的标签。你的代码是 C++,所以不要加 C 语言标签。
  • @Someprogrammerdude 那个平台不允许我复制代码所以这就是我粘贴图片的原因,你能解释一下c++中分段错误的含义吗?
  • @churill 你能提供我工作的确切代码吗
  • 我尝试通过将您的代码复制到我的 IDE 中来重现您的问题。不幸的是,我的 IDE 无法从图像中提取代码。没有代码发布为文本 == 没有帮助。

标签: c++ data-structures stl stack


【解决方案1】:

您可能在堆栈未填满的情况下从堆栈中弹出一个元素。因此,如果字符串不是以{[(开头的,程序就会崩溃。

为避免这种情况,请在弹出之前检查堆栈是否有元素:

//...
// line 21
else if(/* ... */ && st.size() > 0) {
st.pop();
}
// ...

【讨论】:

  • 我根据你修改了代码,但提交后仍然显示分段错误,你能否解释一下c++中分段错误的含义。
  • 尺寸检查(为什么不是empty()?)需要成为启用短路的第一个条件(这避免了要检查的其他条件)。
猜你喜欢
  • 2021-05-05
  • 2014-01-15
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2014-05-09
  • 1970-01-01
相关资源
最近更新 更多