4

我想不通。我有以下代码:

#define SIZE 1000
#define MEMORY 0x10000000

unsigned char table[SIZE];
int i;

for(i=0;i<SIZE;i++) {
    table[i] = *(unsigned char*)(MEMORY +i);
}

Klockwork 告诉我

缓冲区溢出,“表”的数组索引可能超出范围。大小为 1000(调整后大小为 250)的数组“表”可以使用索引值 250..999。

这里真的有问题吗?如果没有,这似乎是一个非常明显的误报。

4

1 回答 1

4

此代码没有问题:Frama-C 确认使用此命令行: frama-c -val -absolute-valid-range 0x10000000-0x10001000 file.c 前提是您将 for 循环放在函数体中。

根据 Klockwork 的说法,这种误报可能与您的演员表有关:请参阅http://developer.klocwork.com/community/forums/klocwork-general/general-discussion/buffer-overflow-adjusted-size

于 2011-08-24T06:11:32.720 回答