Lint 可能访问/创建越界指针
Lint possible access / creation out of bounds pointer
我收到 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);
}
或直接针对范围:
for (const auto& e : my_array){
//do stuff such as
my_variable = e;
my_function(e);
}
sizeof
returns 字节数,而不是元素数,所以我猜错误是有效的。
使用 sizeof(my_array) / sizeof(my_array[0])
获取元素计数。
sizeof(myarray)
returns 对象表示的字节大小。所以不是数组中的项目数,而是整个数组的大小。如果sizeof(my_enum_type) > 1
i
会出界
尝试sizeof(myarray) / sizeof(my_enum_type)
sizeof(my_array)
不是 return 数组中元素的数量,它 return 是数组的字节大小。
获取大小的传统 C 方法是 sizeof(my_array) / sizeof(my_array[0])
但更安全的 C++11 方法是使用 std::extent from <type_traits>:
std::extent<decltype(my_array)>::value
我收到 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);
}
或直接针对范围:
for (const auto& e : my_array){
//do stuff such as
my_variable = e;
my_function(e);
}
sizeof
returns 字节数,而不是元素数,所以我猜错误是有效的。
使用 sizeof(my_array) / sizeof(my_array[0])
获取元素计数。
sizeof(myarray)
returns 对象表示的字节大小。所以不是数组中的项目数,而是整个数组的大小。如果sizeof(my_enum_type) > 1
i
会出界
尝试sizeof(myarray) / sizeof(my_enum_type)
sizeof(my_array)
不是 return 数组中元素的数量,它 return 是数组的字节大小。
获取大小的传统 C 方法是 sizeof(my_array) / sizeof(my_array[0])
但更安全的 C++11 方法是使用 std::extent from <type_traits>:
std::extent<decltype(my_array)>::value