求助啊,每次运行都显示已触发了一个断点,然后光标在红色行_DEBUG_ERROR("list iterator not dereferencable");

daweilihenniu 2017-12-28 10:53:24
template<class _Mylist>
class _List_unchecked_iterator
: public _List_unchecked_const_iterator<_Mylist>
{ // unchecked iterator for mutable list
public:
typedef _List_unchecked_iterator<_Mylist> _Myiter;
typedef _List_unchecked_const_iterator<_Mylist> _Mybase;
typedef bidirectional_iterator_tag iterator_category;

typedef typename _Mylist::_Nodeptr _Nodeptr;
typedef typename _Mylist::value_type value_type;
typedef typename _Mylist::difference_type difference_type;
typedef typename _Mylist::pointer pointer;
typedef typename _Mylist::reference reference;

_List_unchecked_iterator()
{ // construct with null node
}

_List_unchecked_iterator(_Nodeptr _Pnode, const _Mylist *_Plist)
: _Mybase(_Pnode, _Plist)
{ // construct with node pointer _Pnode
}

reference operator*() const
{ // return designated value
return ((reference)**(_Mybase *)this);
}

pointer operator->() const
{ // return pointer to class object
return (&**this);
}

_Myiter& operator++()
{ // preincrement
++(*(_Mybase *)this);
return (*this);
}

_Myiter operator++(int)
{ // postincrement
_Myiter _Tmp = *this;
++*this;
return (_Tmp);
}

_Myiter& operator--()
{ // predecrement
--(*(_Mybase *)this);
return (*this);
}

_Myiter operator--(int)
{ // postdecrement
_Myiter _Tmp = *this;
--*this;
return (_Tmp);
}
};

// TEMPLATE CLASS _List_const_iterator
template<class _Mylist>
class _List_const_iterator
: public _List_unchecked_const_iterator<_Mylist, _Iterator_base>
{ // iterator for nonmutable list
public:
typedef _List_const_iterator<_Mylist> _Myiter;
typedef _List_unchecked_const_iterator<_Mylist, _Iterator_base> _Mybase;
typedef bidirectional_iterator_tag iterator_category;

typedef typename _Mylist::_Nodeptr _Nodeptr;
typedef typename _Mylist::value_type value_type;
typedef typename _Mylist::difference_type difference_type;
typedef typename _Mylist::const_pointer pointer;
typedef typename _Mylist::const_reference reference;

_List_const_iterator()
: _Mybase()
{ // construct with null node pointer
}

_List_const_iterator(_Nodeptr _Pnode, const _Mylist *_Plist)
: _Mybase(_Pnode, _Plist)
{ // construct with node pointer _Pnode
}

typedef _List_unchecked_const_iterator<_Mylist> _Unchecked_type;

_Myiter& _Rechecked(_Unchecked_type _Right)
{ // reset from unchecked iterator
this->_Ptr = _Right._Ptr;
return (*this);
}

_Unchecked_type _Unchecked() const
{ // make an unchecked iterator
return (_Unchecked_type(this->_Ptr, (_Mylist *)this->_Getcont()));
}

reference operator*() const
{ // return designated value
#if _ITERATOR_DEBUG_LEVEL == 2
if (this->_Getcont() == 0
|| this->_Ptr == 0
|| this->_Ptr == ((_Mylist *)this->_Getcont())->_Myhead)
{ // report error
_DEBUG_ERROR("list iterator not dereferencable");
_SCL_SECURE_OUT_OF_RANGE;
}

#elif _ITERATOR_DEBUG_LEVEL == 1
_SCL_SECURE_VALIDATE(this->_Getcont() != 0 && this->_Ptr != 0);
_SCL_SECURE_VALIDATE_RANGE(this->_Ptr !=
((_Mylist *)this->_Getcont())->_Myhead);
#endif /* _ITERATOR_DEBUG_LEVEL */

return (_Mylist::_Myval(this->_Ptr));
}

_Myiter& operator++()
{ // preincrement
#if _ITERATOR_DEBUG_LEVEL == 2
if (this->_Getcont() == 0
|| this->_Ptr == 0
|| this->_Ptr == ((_Mylist *)this->_Getcont())->_Myhead)
{ // report error
_DEBUG_ERROR("list iterator not incrementable");
_SCL_SECURE_OUT_OF_RANGE;
}

#elif _ITERATOR_DEBUG_LEVEL == 1
_SCL_SECURE_VALIDATE(this->_Getcont() != 0 && this->_Ptr != 0);
_SCL_SECURE_VALIDATE_RANGE(this->_Ptr !=
((_Mylist *)this->_Getcont())->_Myhead);
#endif /* _ITERATOR_DEBUG_LEVEL */


“duoAGVfenjian.exe”: 已加载“D:\研究生\机器人\机器人副本\RobotSimulation-master - 副本\xiangmu\duoAGVfenjian\Debug\duoAGVfenjian.exe”,已加载符号。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\ntdll.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\kernel32.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\KernelBase.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\msvcp100d.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\msvcr100d.dll”,已加载符号。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\user32.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\gdi32.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\lpk.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\usp10.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\msvcrt.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\advapi32.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\sechost.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\rpcrt4.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\sspicli.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\cryptbase.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\imm32.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\msctf.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\uxtheme.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\dwmapi.dll”,已加载符号(去除源信息)。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\ole32.dll”,已加载符号。
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\oleaut32.dll”,已加载符号(去除源信息)。
duoAGVfenjian.exe 已触发了一个断点
线程 '主线程' (0x1960) 已退出,返回值为 -1073741510 (0xc000013a)。
程序“[4216] duoAGVfenjian.exe: 本机”已退出,返回值为 -1073741510 (0xc000013a)。
...全文
198 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-12-28
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
幻夢之葉 2017-12-28
  • 打赏
  • 举报
回复
你发list模板代码没有什么意义。

VS下:触发断点时,点击中断,在调用堆栈窗口中(菜单-调试-窗口中打开),找到你最靠近调用的代码

这个错误一般发生在需要迭代器的地方,你给了一个不是指定范围的迭代器
比如:
std::list<int> a, b;
std::sort(a.begin(), b.end());
//sort要求给出的迭代器是在同一容器有效范围内,【a.begin(),a.end()】【b.begin(), b.end()】范围任一迭代器都属于同一容器的
//假如此时给一个a范围的迭代器,再给一个b范围的迭代器,debug下就会发生断言中断
daweilihenniu 2017-12-28
  • 打赏
  • 举报
回复
“duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\usp10.dll”,已加载符号(去除源信息)。 “duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\msvcrt.dll”,已加载符号(去除源信息)。 “duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\advapi32.dll”,已加载符号(去除源信息)。 “duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\sechost.dll”,已加载符号(去除源信息)。 “duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\rpcrt4.dll”,已加载符号(去除源信息)。 “duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\sspicli.dll”,已加载符号(去除源信息)。 “duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\cryptbase.dll”,已加载符号(去除源信息)。 “duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\imm32.dll”,已加载符号(去除源信息)。 “duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\msctf.dll”,已加载符号(去除源信息)。 “duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\uxtheme.dll”,已加载符号(去除源信息)。 “duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\dwmapi.dll”,已加载符号(去除源信息)。 “duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\ole32.dll”,已加载符号。 “duoAGVfenjian.exe”: 已加载“C:\Windows\SysWOW64\oleaut32.dll”,已加载符号(去除源信息)。 duoAGVfenjian.exe 已触发了一个断点 duoAGVfenjian.exe 已触发了一个断点 Microsoft Visual Studio C 运行库在 duoAGVfenjian.exe 中检测到一个错误。
daweilihenniu 2017-12-28
  • 打赏
  • 举报
回复
void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved) { /* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */ (_Reserved); _debugger_hook_dummy = 0; } 这是另一个断点啊

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧