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

lul*_*eta 2 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]);
}  
Run Code Online (Sandbox Code Playgroud)

我使用的行my_array[i]是代码661/662.

Jar*_*d42 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);
}
Run Code Online (Sandbox Code Playgroud)

或直接用于范围:

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


for*_*idt 5

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