共用方式為


警告 C33011

用於做為索引之列舉 'enum' 的未核取上限。

備註

如果檢查下限的值,則會針對做為陣列索引的列舉觸發這個警告,但不會檢查上限。

程式碼分析名稱: UNCHECKED_UPPER_BOUND_FOR_ENUMINDEX

範例

使用列舉型別做為陣列索引的程式碼必須檢查下限和上限的列舉值。 如果列舉值只檢查下限,再用來編制值陣列的索引(或函式指標的陣列),則可以允許讀取、使用或甚至執行任意記憶體。

typedef void (*PFN)();

enum class Index
{
    Zero,
    One,
    Two,
    Three,
    Max
};

void foo(Index idx, PFN(&functions)[5])
{
    if (idx < Index::Zero)
        return;

    auto pfn = functions[static_cast<int>(idx)];    // C33011
    if (pfn != nullptr)
        (*pfn)();
    // ......
}

檢查上限的索引值,以更正這些警告:

typedef void (*PFN)();

enum class Index
{
    Zero,
    One,
    Two,
    Three,
    Max
};

void foo(Index idx, PFN(&functions)[5])
{
    if (idx < Index::Zero || idx > Index::Max)
        return;

    auto pfn = functions[static_cast<int>(idx)];    // OK
    if (pfn != nullptr)
        (*pfn)();
    // ......
}

另請參閱

C33010