共用方式為


警告 C26485

運算式 ' array-name ':指標衰變的陣列沒有陣列(bounds.3)。

備註

如同 C26481 ,這項檢查有助於強制執行 C++ 核心指導方針 規則 I.13 不要將陣列傳遞為單一指標 。 此規則會偵測靜態陣列類型資訊從衰變遺失到原始指標的位置。 zstring不會排除 和 czstring 型別。

C26481 和 C26485 來自 界限保管庫ty 設定檔 規則。 這些規則是在 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::spanstd::vector 。 明確轉換成衰敗的指標類型可防止警告,但不會防止錯誤程式碼。