为什么在使用带有unsigned int的calloc时会出现覆盖性

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

我有以下内容:

static unsigned int *tick = NULL;
...
 if (tick == NULL)
     tick = calloc(MAX_PORT,sizeof(unsigned int));
...

功能上按预期工作,但覆盖率抱怨:解析警告(PW.INCOMPATIBLE_ASSIGNMENT_OPERANDS)1。incompatible_assignment_operands:类型“int”的值不能分配给“unsigned int *”类型的实体,我不完全理解为什么

c calloc coverity
2个回答
7
投票

错误消息表明,Coverity认为calloc返回int,如果你没有包含stdlib.h(对于旧版C中的calloc),可能会发生这种情况。但现代C中不允许这样做(即C99及以上版本不允许隐含声明) )。


1
投票

“......功能如预期的那样”

不,这段代码无法在任何版本的C,新旧版本上编译。

在C的旧版本C90中,您可能会忘记包含stdlib.h,然后编译器会将calloc视为返回int而不是void*的函数。这就是静态分析仪的用武之地。但代码甚至不应该编译,因为即使在C90编译器上它也会导致诊断 - 你不能将int分配给unsigned int*。它从未有效C.

在标准C中,代码甚至不会那么远,因为编译器会告诉你它不知道标识符calloc是什么。

所有这些都表明你的编译器是1)旧的和2)不兼容的。

© www.soinside.com 2019 - 2024. All rights reserved.