无法解决KlockWork缓冲区溢出错误



我无法找出解决这个KlockWork问题的方法。

KlockWork显示ABV。GENERAL (1:P1)延迟以下代码

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'可能使用索引值(s) min(size+(-1), 255)..min(size+(-1), 255)

请建议一些避免此错误的方法。

感谢

在我看来,您缺少这些头文件之一,或者fun2函数的转发函数原型:

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
void fun2(uint32_t*arr, uint32_t size);

我已经编译了你的代码加上所有这些东西,没有警告或错误。加上我在你的问题的评论中告诉你的。

最新更新