列表,迭代器定义只在Eclipse调试器中进行分段

list, iterator definition make segmentation only in the Eclipse debugger

本文关键字:调试器 分段 Eclipse 迭代器 定义 列表      更新时间:2023-10-16

我有一个类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_listE_shop_file_data对象)

我不明白在第一个版本中怎么可能有分段错误。

如果让我猜的话,我猜调试器正在尝试显示迭代器下的当前值。

由于迭代器还没有初始化(在有bug的版本中),调试器试图沿着彩虹上的一些东西进入永无之地。这通常不是一个好主意

只在程序连接到调试器时才发生段错误,这似乎暗示调试器本身试图解引用迭代器,可能是为了在监视窗口中显示迭代器的项。

因为迭代器是无效的(你没有初始化它),逻辑上会出现段错误。

在第二个版本中,迭代器是有效的,所以调试器可以毫不费力地获取它的项。

如果调试器停在该行,则可能您的代码在某种程度上进行了优化。就像@syam说的,只有当迭代器被解引用时,你才会得到段错误。