gpt4 book ai didi

c++ - std::stack 在 eclipse 中调试时导致段错误

转载 作者:行者123 更新时间:2023-11-30 04:13:38 24 4
gpt4 key购买 nike

所以我在过去一天左右一直在与 std::stack 库作斗争。我正在尝试调试我的一些代码,而不是通过笔和纸来做事,我正在使用 eclipse 调试器。

第一个奇怪的事情是,如果我在 eclipse 表达式窗口中有一个与堆栈相关的表达式,程序将在我启动它时立即死掉。

另一件事是,它第一次运行时,调试器看到堆栈正常。我可以通过表达式窗口检查它的元素。但是,一旦我将某些东西压入堆栈,stack.top() 方法就开始在表达式窗口中返回错误。然后,如果我尝试逐步执行该程序,它就会死掉。这不是在没有调试器的情况下运行时的行为,所以我在这里真的很茫然。

问题代码如下:

我需要做的就是点击 step over,Eclipse 从 STL_deque.h 文件打开一个窗口,然后我点击 step return,它就死了。

int main() {
std::stack<Cell> path;
return 0;
}

最佳答案

您的代码很好(至少,您向我们展示的代码部分)。您描述的问题只是当您尝试计算 stack.top()Eclipse 调试器 崩溃了在里面。这是 Eclipse 中的一个错误(特别是在其对检查 C++ 容器类型的内置支持中),您自己无法轻松修复。

一种可能的解决方法是在您自己的代码中添加调试功能;例如

const Cell *stackTop(const std::stack<Cell> *stk)
{ return &stk->top(); }

然后无论何时你想到达 stack.top()在调试 session 中,输入 *stackTop(&stack)反而。请注意 stackTop 的定义避免处理模板、内联、引用、移动语义——所有这些都是我认为普通调试器会遇到麻烦的事情——相反,它只是一个单独的非模板函数,它需要一个指针并返回一个指针。一个非常愚蠢的调试器才会被这个简单的函数弄糊涂。

如果 Eclipse 可以成功检查 std::vector<Cell>没有崩溃,那么您可以考虑重写代码以使用 vector而不是 stack ; this will likely be more efficient anyway.

关于c++ - std::stack<T> 在 eclipse 中调试时导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19368808/

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