c++ - CPtrList->RemoveHead() 如何导致 CInvalidArgumentException?
问题描述
这个问题与上一个问题非常相似,这次我想更熟悉这个主题,或者至少熟悉它的文档:
我正在处理一个进程崩溃,由于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) 程序员是否有类似的东西?
提前致谢
解决方案
检查源代码,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
为空。
推荐阅读
- python-3.x - 使用张量流的 CNN 中的尺寸错误
- c# - 安全地暂停线程
- visual-studio-code - 如何仅按特定文件类型而不是文件夹搜索 vscode
- scalajs-bundler - 无法让任何 scalajs-bundler 样本工作
- sass - 在 sass 函数中使用 css 变量 - node-sass
- powershell - 使用 if 条件检查命令执行状态
- sql - 有没有办法从 XML 中找出特定的标签值?
- mysql - 如何在状态= 2的mysql中使用if条件
- sql - SQL BigQuery:选择基于时间的查询
- c# - C# HtmlAgilityPack - GetAttributeValue 返回 false bool