首页 > 解决方案 > CPtrList->RemoveHead() 如何导致 CI​​nvalidArgumentException?

问题描述

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

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

错误的源代码如下所示:

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) 程序员是否有类似的东西?

提前致谢

标签: c++mfc

解决方案


检查源代码,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为空。


推荐阅读