0

我有一堂课E_shop_file_data

在以下行:

std::list<E_shop_file_data>::iterator myfile_list_iterator_master;

*** Break *** segmentation violation当我在 Eclipse 调试器中运行程序时,我得到了一个。当它在没有调试器的情况下运行时,就可以了。

当我将上一行更改为:

std::list<E_shop_file_data>::iterator myfile_list_iterator_master = myfile_list.begin();

没有分段错误!(myfile_list 是一个E_shop_file_data对象)

我无法理解第一个版本中怎么可能出现分段错误。

4

3 回答 3

0

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

由于迭代器无效(您没有对其进行初始化),因此逻辑上会出现段错误。

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

于 2013-05-22T16:40:43.197 回答
0

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

由于迭代器没有被初始化(在有缺陷的版本中),调试器试图沿着彩虹进入Never-Never Land。这通常不是一个好主意。

于 2013-05-22T16:41:16.420 回答
0

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

于 2013-05-22T17:20:37.820 回答