C ++中的调试断言失败

时间:2010-07-14 19:20:50

标签: c++ assertion

这是我关于stackoverflow的第一个问题。

我正在尝试调试程序,但是当我尝试运行它时,它会终止并显示错误消息 Debug Assertion失败,当我重试调试它时,创建了一个断点,它将我带到 这个函数中的向量

#if _HAS_ITERATOR_DEBUGGING
 _Vector_const_iterator(_Tptr _Ptr, const _Container_base *_Pvector)
  { // construct with pointer _Ptr
  _SCL_SECURE_VALIDATE(_Pvector == NULL || (((_Myvec *)_Pvector)->_Myfirst <= _Ptr && _Ptr <= ((_Myvec *)_Pvector)->_Mylast));
  this->_Adopt(_Pvector);
  _Myptr = _Ptr;
  }

和这一行

_SCL_SECURE_VALIDATE(_Pvector == NULL || (((_Myvec *)_Pvector)->_Myfirst <= _Ptr && _Ptr <= ((_Myvec *)_Pvector)->_Mylast));

请说明问题所在的位置以及在哪里查看。我使用的迭代器是否存在问题。

由于

2 个答案:

答案 0 :(得分:2)

我认为你应该发布你的代码,但不要发布STL断言代码(显然这个代码最容易调查:)

无论如何,这个断言消息通常表示尝试访问错误的索引(越界)或std::vector中的类似写操作或其周围的包装。

如果您存储的迭代器在例如插入序列之后变为无效,则也可能导致这种情况。

答案 1 :(得分:0)

您可以发布触发此错误的您的代码吗?看起来他们的调试检查(可能是边界或类似的东西)是失败的,但是如果函数的输入在某种程度上有问题,那么断言只会失败。为了让我们真正为您提供帮助,我们需要查看调用此行为的代码。