std::堆栈<T>在 Eclipse 中调试时导致段错误
std::stack<T> causing segfaults while debugging in eclipse
所以我在最后一天左右一直在与 std::stack 库作斗争。我正在尝试调试我的一些代码,而不是用笔和纸做事,我正在使用 eclipse 调试器。
第一个奇怪的事情是,如果我在 eclipse 表达式窗口中有一个与堆栈相关的表达式,程序将在我启动它后立即死亡。
另一件事是,第一次运行时,调试器看到堆栈很好。我可以通过表达式窗口检查其元素。但是一旦我将某些内容推送到堆栈上,stack.top() 方法就开始在表达式窗口中返回错误。然后,如果我尝试步进程序,它就会死。这不是在没有调试器的情况下运行时的行为,所以我在这里真的很不知所措。
这是问题代码:
我需要做的就是点击步进,Eclipse 从 stl_deque.h 文件打开一个窗口,然后我按步返回键,它就死了。
int main() {
std::stack<Cell> path;
return 0;
}
你的代码很好(至少,你向我们展示的代码部分)。您所描述的问题只是当您尝试评估 Eclipse 调试器中的stack.top()
时崩溃。这是 Eclipse 中的一个错误(特别是它内置的检查C++容器类型的支持),这不是你自己可以轻松修复的。
一种可能的解决方法是将调试函数添加到您自己的代码中;例如
const Cell *stackTop(const std::stack<Cell> *stk)
{ return &stk->top(); }
然后,每当你想要在调试会话中获取stack.top()
时,请改为键入*stackTop(&stack)
。请注意,stackTop
的这个定义避免了处理模板、内联、引用和移动语义——所有这些都是我希望普通调试器遇到麻烦的事情——相反,它只是一个非模板化函数,它接受一个指针并返回一个指针。需要一个非常愚蠢的调试器才能被这个简单的函数弄糊涂。
如果Eclipse可以成功地检查std::vector<Cell>
而不会崩溃,那么你可以考虑重写代码以使用vector
而不是stack
;无论如何,这可能会更有效率。
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 如何摆脱C ++中的分段错误错误?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 如何解决分段错误错误C++
- 作为参数模板的模板类:MSVC 错误 - 错误 C2977:模板参数过多 (C++98)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 卷曲给出分段错误错误
- 无法访问 Arduino 结构字段。错误"退出状态 1。xxxx 不命名类型"
- 错误错误 C2872:"布尔值":kinect.h 的不明确符号
- C++打印模板容器错误(错误:"运算符<<"的不明确重载)理解?
- 结构的分割错误错误
- 为什么此代码返回分段错误错误?
- 错误错误:无法编译内置功能
- 分段错误错误C++
- C++ 1Z 错误:错误:演绎指南中声明中的显式限定
- 使用对数据类型的向量的哈希表中的分段错误错误
- 为什么此代码会导致分段错误错误
- JNA结构字段值错误
- C++段故障错误