C26486-不传递可能对函数无效的指针吗?

问题描述 投票:0回答:1

我正在为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)

在分配之前,但警告仍然存在。

我是否想念这个问题?

c++ visual-studio pointers compiler-warnings
1个回答
0
投票
PETHREAD pThread = static_cast<PETHREAD>(OperationInformation->Object);
if(pThread != nullptr) //or 'pThread != NULL' or '!pThread'
{
   auto test = IoThreadToProcess(static_cast<PETHREAD>(OperationInformation->Object));
}
© www.soinside.com 2019 - 2024. All rights reserved.