假设我有以下功能:
void process_data(uint32_t * data, size_t length) {
for (size_t i = 0; i < length; i++) {
foo(data[i]);
}
}
如何告诉Frama-C“此功能确保对data[i]
的每次访问都满足条件i < length
”?据我所知,我可以在每行代码data
附近放置一个断言,但是有更好的方法吗?
答案 0 :(得分:2)
为防止无效的内存访问,您需要检查是否始终使用data
指针调用此函数,从中可以读取至少length
个元素。所以你需要写一个先决条件:
//@ requires \valid_read (data + (0 .. length-1));
void process_data(uint32_t * data, size_t length) {
因此,如果您可以确保此属性有效,则可以确保您不会有任何无效的内存访问。