繁体   English   中英

CPtrList-> RemoveHead()如何导致CInvalidArgumentException?

[英]How can a CPtrList->RemoveHead() cause an CInvalidArgumentException?

这个问题与上一个问题非常相似,这次我想更加了解这个主题,或者至少是它的文档:

我正在处理由于CInvalidArgException导致的进程崩溃,同时执行了包含6个条目的CPtrList对象的RemoveHead()

错误的源代码如下所示:

pSingle = (SET_PARAMETER*)plMultiple->RemoveHead();

调用堆栈如下:

mfc110u.dll!AfxThrowInvalidArgException(void)
mfc110u.dll!CObList::RemoveHead(void)
Application.exe!SingleThread(void * pArg=0x0000006800000000) Line 673

为了了解正在发生的事情,我看了有关CPtrList(CObList)RemoveHead()的官方Microsoft文档网站 ,但没有找到对CInvalidArgException引用。

只是作一下比较:对于Java程序员,有一个文档说明了您在编程时可能遇到的每个异常(例如, 官方文档中提到了所有异常,这些异常可能在执行方法时抛出)。

我想知道C ++(STL)程序员是否有类似的东西?

提前致谢

检查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为空。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM