警告 C26485
表達式 'array-name':指標衰變的陣列沒有陣列(bounds.3)。
備註
如同 C26481,這項檢查有助於強制執行 C++核心指導方針 規則 I.13: 不要將陣列當作單一指標傳遞。 此規則會偵測靜態數位類型資訊從衰變遺失到原始指標的位置。 zstring
不會排除和 czstring
型別。
C26481 和 C26485 來自 界限安全配置文件 規則。 這些規則是在C++核心指導方針檢查程式的第一個版本中實作的。 它們適用於原始指標類別,因為它們有助於避免不安全使用原始指標。
範例
此範例會在呼叫 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
。 明確轉換成衰敗的指標類型可防止警告,但不會防止錯誤程序代碼。