gpt4 book ai didi

cppcheck "Possible null pointer dereference"。误报还是错误?

转载 作者:行者123 更新时间:2023-12-04 01:07:12 24 4
gpt4 key购买 nike

我有这个 C 代码:

#include <stdio.h>                                                              
#include <stdlib.h>

typedef struct {
int value;
} pointer_t;

int some_func (pointer_t *p)
{
int v = ( rand () ) ? 99 :
( !p ) ? 0 :
( p->value % 2 == 0 ) ? 1 : /* << This is line 12 */
-1 ;

return v;
}

int main () {
pointer_t p = { .value = 7 };

printf ("With a pointer : %d\n", some_func (&p));
printf ("With a NULL : %d\n", some_func (NULL));
}

当我运行时:

cppcheck prog.c

我收到以下警告:

[prog.c:12]: (warning) Possible null pointer dereference: p

但我认为我的代码中没有错误:当 pNULL 时,前一行已经检查了大小写,所以在 12 行 p 必须是非NULL

这是 cppcheck 中的误报,还是有我没有检查的极端情况?

编辑

如果有帮助,这些是我所做的一些检查:

/* Generates a warning */
v = ( rand () ) ? 99 :
( !p ) ? 0 :
( p->value % 2 == 0 ) ? 1 :
-1 ;

/* Does not generate a warning */
v = ( p == NULL ) ? 0 :
( p->value % 2 == 0 ) ? 1 :
-1 ;

/* Does not generate a warning */
if ( rand () )
v = 99;
else if (!p)
v = 0;
else if (p->value % 2 == 0)
v = 1;
else
v = -1;

/* Generates a warning */
v = ( rand () ) ? 99 :
( p == NULL ) ? 0 :
( p->value % 2 == 0 ) ? 1 :
-1 ;

最佳答案

这看起来像是误报,因为 cppcheck 似乎并没有遵循所有分支。

这基本上是:

 if (rand())
return 99;
else if(!p)
return 0;
else if(p->value %2 == 0)
return 1;
else
return -1;

关于cppcheck "Possible null pointer dereference"。误报还是错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66062746/

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