警告 C26485
表达式“array-name”:无数组到指针衰减 (bounds.3)。
备注
与 C26481 一样,此检查有助于强制实施 C++ Core Guidelines 规则 I.13:不要将数组作为单个指针传递。 该规则检测静态数组类型信息衰减为原始指针的位置。 不会排除 zstring
和 czstring
类型。
C26481 和 C26485 来自边界安全配置文件规则。 C++ Core Guidelines 检查器的第一个版本实现了这些规则。 它们适用于原始指针类别,因为它们有助于避免不安全使用原始指针。
示例
此示例在 memcpy
调用期间针对数组衰减为指针发出两个警告。
// c26485_bad.cpp
// compile using:
// set Esp.Extensions=CppCoreCheck.dll
// cl /W4 /EHsc /permissive- /analyze /analyze:plugin EspXEngine.dll /analyze:ruleset "%VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets\CppCoreCheckBoundsRules.ruleset" c26485_bad.cpp
#include <cstring>
constexpr int array_length = 10;
int main() noexcept
{
int const from_array[array_length] = { 4, 3, 2, 1, 0, 9, 8, 7, 6, 5 };
int to_array[array_length] = {};
if (nullptr != memcpy(to_array, from_array, sizeof(int) * array_length))
return 0;
return 1;
}
若要解决此问题,请避免进行将采用指针参数但不管理边界信息的调用。 使用此类函数通常容易出错。 首选对 C 运行时库函数进行 C++ 标准库调用。 请考虑在自己的函数中使用 gsl::span
或 std::vector
。 显式强制转换为已衰减的指针类型可以防止发出警告,但不会防止出错的代码。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈