gpt4 book ai didi

c++ - 可能的空指针取消引用 - 否则检查它是否为空指针是多余的

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:58 25 4
gpt4 key购买 nike

我有以下代码,可以正常工作:

int result = ERRORCODE_OK;
if (dataObj == NULL || dataObj->inputSignal == NULL)
{
result = ERRORCODE_MISSING_DATAOBJ;
}
if (result == ERRORCODE_OK && dataObj->spectrum == NULL) // CPP-Check error
{
result = Calculate(dataObj->inputSignal, .. );
}
return result;

但是 CppCheck 给我以下错误:

Possible null pointer dereference: dataObj - otherwise it is redundant to check it against null.

我不明白为什么。如果 dataobjNULL,则结果将为 ERRORCODE_OK

最佳答案

CppCheck 的检查不够深入,如果第一个条件成功,您的第二个条件将不会得到全面评估:

int result = ERRORCODE_OK;
if (dataObj == NULL || dataObj->inputSignal == NULL)
result = ERRORCODE_MISSING_DATAOBJ;

// Here, you can see that either dataObj!=NULL or result!=ERRORCODE_OK.
// But CppCheck can't!

if (result == ERRORCODE_OK && dataObj->spectrum == NULL)
result = Calculate(dataObj->inputSignal, .. );
return result;

安抚检查者的三种替代方法出现了。首先,只需在第二个 if 中重复检查 dataObj 是否为空。其次,将第二个if改为else if:

int result = ERRORCODE_OK;
if (dataObj == NULL || dataObj->inputSignal == NULL)
{
result = ERRORCODE_MISSING_DATAOBJ;
}
else if (result == ERRORCODE_OK && dataObj->spectrum == NULL)
{
result = Calculate(dataObj->inputSignal, .. );
}
return result;

第三,一旦发现错误情况之一,立即返回:

if (!dataObj || !dataObj->inputSignal)
return ERRORCODE_MISSING_DATAOBJ;
if (dataObj->spectrum)
return ERRORCODE_OK;
return Calculate(dataObj->inputSignal, .. );

关于c++ - 可能的空指针取消引用 - 否则检查它是否为空指针是多余的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32839786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com