检查可能的访问/创建越界指针

Lint possible access / creation out of bounds pointer

本文关键字:创建 越界 指针 访问 检查      更新时间:2023-10-16

我得到一个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。

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);
}

或直接用于range:

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

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

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

获取大小的传统C方法是sizeof(my_array) / sizeof(my_array[0]),但更安全的c++ 11方法是使用std::extent from :

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

sizeof(myarray)返回以字节为单位的对象表示的大小。不是数组中的项数,而是整个数组的大小。如果sizeof(my_enum_type) > 1 i将超出边界

试试sizeof(myarray) / sizeof(my_enum_type)