Lint可能访问/创建越界指针

时间:2015-07-23 08:15:06

标签: c++ lint

我得到一个Lint警告661 / 662.他们意味着可能访问/创建越界指针。但我确实检查边界,不可能超出范围。任何想法如何摆脱它?

const my_enum_type my_array[] = {MY_FIRST_ENUM_VALUE, MY_SECOND_ENUM_VALUE, MY_THIRD_ENUM_VALUE};  
for(i = 0; i < sizeof(my_array); i++){ 
    //do stuff such as
    my_variable = my_array[i];
    my_function(my_array[i]);
}  

我使用my_array[i]的行抱怨代码为661/662。

4 个答案:

答案 0 :(得分:6)

sizeof(my_array)不是你想要的。你想要sizeof(my_array) / sizeof(*my_array)

您可以使用迭代器:

for(auto it = std::begin(my_array); it != std::end(my_array); ++it){ 
    //do stuff such as
    my_variable = *it;
    my_function(*it);
}

或直接针对范围:

for (const auto& e : my_array){ 
    //do stuff such as
    my_variable = e;
    my_function(e);
}

答案 1 :(得分:5)

sizeof返回字节数,而不是元素,所以我猜错误是有效的。 使用sizeof(my_array) / sizeof(my_array[0])获取元素数。

答案 2 :(得分:4)

sizeof(my_array)不返回数组中的元素数,它返回数组的字节大小。

获取大小的传统C方式是sizeof(my_array) / sizeof(my_array[0]),但更安全的C ++ 11方法是使用来自&lt; std::extent&gt;的type_traits

std::extent<decltype(my_array)>::value

答案 3 :(得分:2)

sizeof(myarray)返回对象表示的字节大小。所以不是数组中的项目数,而是整个数组大小。如果sizeof(my_enum_type) > 1 i超出范围。

尝试sizeof(myarray) / sizeof(my_enum_type)