我无法弄清楚这一点。我有以下代码:
#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告诉我
缓冲区溢出,'table'的数组索引可能超出范围。大小为1000(调整大小为250)的数组'表'可以使用索引值250..999。
这里有真正的问题吗?如果不存在,这似乎是非常明显的误报。
答案 0 :(得分: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