【发布时间】:2019-11-18 23:20:37
【问题描述】:
我正在为 Windows 开发内核驱动程序,最近我决定从 C 过渡到 C/C++。在我的代码转换过程中,我遇到了一个我无法解决的警告。基本上,我有一个带有这行特定代码的函数:
OB_PREOP_CALLBACK_STATUS
OCPreOperationCallback(
_In_ PVOID RegistrationContext,
_Inout_ POB_PRE_OPERATION_INFORMATION OperationInformation
)
{
// ...
auto test = IoThreadToProcess(static_cast<PETHREAD>(OperationInformation->Object));
// ...
}
此行突出显示错误消息如下:
警告 C26486 不要将可能无效的指针传递给函数。对“IoThreadToProcess”的调用中的参数 0“(*OperationInformation).Object”可能无效 (lifetime.3)。
警告似乎很清楚:我需要确保作为参数传递的指针是有效的。然而,我找不到任何方法来检查无效状态。我尝试添加:
if(OperationInformation != nullptr && OperationInformation->Object != nullptr)
在分配之前,但警告仍然存在。
我是否错过了有关此问题的某些内容?
【问题讨论】:
-
对此不熟悉,但是当您检查
static_cast<PETHREAD>结果是否为空时会发生什么? -
似乎较新的 Visual Studio 版本中的静态分析变得过于激进;最近有很多关于误报的问题。我怀疑这可能是其中之一。
标签: c++ pointers compiler-warnings