list,iterator定义仅在Eclipse调试器中进行分段

时间:2013-05-22 16:29:42

标签: c++ eclipse stl

我有一个班级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个对象)

我无法理解如何在第一个版本中出现分段错误。

3 个答案:

答案 0 :(得分:0)

仅在程序附加到调试器时发生segfault的事实似乎暗示调试器本身试图取消引用迭代器,可能是在监视窗口中显示迭代器的项目。

由于迭代器无效(你没有初始化它),因此逻辑上会发生段错误。

在第二个版本中,迭代器是有效的,因此调试器可以毫无困难地抓取它的项目。

答案 1 :(得分:0)

如果我不得不猜测,我猜测调试器正试图在迭代器“下”显示当前值。

由于迭代器尚未初始化(在错误的版本中),调试器会尝试将彩虹上的内容跟踪到Never-Never Land。这通常不是一个好主意。

答案 2 :(得分:0)

如果调试器在该行停止,您的代码似乎可能在某个级别进行了优化。就像@syam所说的那样,只有在迭代器被解除引用后才会得到段错误。