这个问题与this previous one非常相似,这次我想更加了解这个主题,或者至少是它的文档:
在处理包含6个条目的CInvalidArgException
对象的RemoveHead()
时,我正在处理由于CPtrList
而导致的进程崩溃。
错误的源代码如下:
pSingle = (SET_PARAMETER*)plMultiple->RemoveHead();
调用堆栈如下:
mfc110u.dll!AfxThrowInvalidArgException(void)
mfc110u.dll!CObList::RemoveHead(void)
Application.exe!SingleThread(void * pArg=0x0000006800000000) Line 673
为了了解正在发生的事情,我看了the official Microsoft documentation website about CPtrList(CObList) RemoveHead(),但是没有找到关于CInvalidArgException
的参考。
仅作一个比较:对于Java程序员,有一个文档解释了您在编程时可能遇到的每个异常(例如Official documentation提到了所有异常,这些异常可能在执行方法时抛出)。
我想知道C ++(STL)程序员是否有类似的东西?
预先感谢
答案 0 :(得分:0)
检查CObList
的源代码,我们看到第一行是:
ENSURE_VALID(this);
此宏定义为:
#define ENSURE_VALID(pOb) ENSURE_VALID_THROW(pOb, ::AfxThrowInvalidArgException() )
依次定义为:
#define ENSURE_VALID_THROW(pOb, exception) \
do { ASSERT_VALID(pOb); if (!(pOb)){exception;} } while (false)
换句话说,它将在调试模式下引发一个断言,而在发布模式下,它将调用您所看到的AfxThrowInvalidArgException
。
简而言之,plMultiple
为空。