列表,迭代器定义只在Eclipse调试器中进行分段
list, iterator definition make segmentation only in the Eclipse debugger
我有一个类E_shop_file_data
。
下一行:
std::list<E_shop_file_data>::iterator myfile_list_iterator_master;
当我在Eclipse调试器中运行程序时,我得到一个*** Break *** segmentation violation
。当没有调试器的情况下运行它时,它是可以的。
当我将前一行更改为:
std::list<E_shop_file_data>::iterator myfile_list_iterator_master = myfile_list.begin();
没有分割错误!(myfile_list
为E_shop_file_data
对象)
我不明白在第一个版本中怎么可能有分段错误。
如果让我猜的话,我猜调试器正在尝试显示迭代器下的当前值。
由于迭代器还没有初始化(在有bug的版本中),调试器试图沿着彩虹上的一些东西进入永无之地。这通常不是一个好主意
只在程序连接到调试器时才发生段错误,这似乎暗示调试器本身试图解引用迭代器,可能是为了在监视窗口中显示迭代器的项。
因为迭代器是无效的(你没有初始化它),逻辑上会出现段错误。
在第二个版本中,迭代器是有效的,所以调试器可以毫不费力地获取它的项。
如果调试器停在该行,则可能您的代码在某种程度上进行了优化。就像@syam说的,只有当迭代器被解引用时,你才会得到段错误。
相关文章:
- 正在VS调试器中监视映射条目
- 为什么我的 VS 代码调试器在我的C++代码周围弹跳?
- 带有 GDB 调试器的 VS 代码内存视图
- 为什么调试器引发"read access violation. this was nullptr"异常?
- VS2017调试器:没有地址,可能是由于编译器优化
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- 使用 Windows 10 和 MINGW 编译器在 VS Code 上使用 gdb 调试器进行调试时出错
- 如何在可视化代码中生成用于 c++ 开发的调试器?
- 为什么我的程序无法在GDB在线编译器/调试器或Visual Studio C++ 2019中运行
- Popen使Qt调试器崩溃
- 附加调试器并以编程方式获取变量地址 Visual Studio
- 在集成终端上运行vscode lldb调试器时,如何获取程序的输出?
- 宏使枚举调试器感知?
- Eclipse-C++-调试器立即终止
- 标识gdb调试器中符号的源文件名
- 无法弄清楚错误来自哪里(调试器说分段错误)
- 未使用调试器标志编译的代码出现分段错误
- Qt的调试器对分段错误有好处吗?
- 列表,迭代器定义只在Eclipse调试器中进行分段
- c++什么是一个很好的分段错误调试器