0

我无法找出这个 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)

请提出一些避免此错误的方法。

谢谢

4

1 回答 1

0

在我看来,您缺少这些头文件之一,或者该函数的前向函数原型fun2

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

void fun2(uint32_t*arr, uint32_t size);

我已经在所有这些东西之前编译了你的代码,没有收到任何警告或错误。加上我在对您问题的评论中告诉您的内容。

于 2021-03-09T13:24:34.173 回答