【发布时间】:2021-06-05 05:07:51
【问题描述】:
我无法找出这个 KlockWork 问题的解决方案。
KlockWork 显示 ABV.GENERAL (1:P1) Defer 以下代码
void fun1(uint32_t size)
{
if(size > 256)
{
return;
}
uint32_t *arr = (uint32_t *)malloc(size * sizeof(uint32_t));
if(arr == NULL)
{
return;
}
memset(arr, 0, size * sizeof(uint32_t));
fun2(arr, size);
free(arr);
}
void fun2(uint32_t *arr, uint32_t size)
{
uint32_t i = 0;
if(size > 256)
{
return;
}
while( i < size )
{
arr[i] = i;
printf("%d", arr[i]);
i++;
}
}
错误:大小为“size*4”的数组“arr”可能使用索引值 min(size+(-1), 255)..min(size+(-1), 255)
请提出一些避免此错误的方法。
谢谢
【问题讨论】:
-
也许它与类型有关。可变大小一次是int,一次是uint32_t
-
对不起.. 传递给 fun1 的参数大小也是 uint32..
-
绝不!永远不要转换
malloc的结果值。这是一种遗留用途,它隐藏了几个可能的错误(例如,你所做的不包括<stdlib.h>)它早于C 中没有void类型的时代。你不应该使用强制转换如果您已正确包含<stdlib.h>文件。
标签: arrays c malloc static-analysis klocwork