共用方式為


警告 C26459

您呼叫了 STL 函式 '%function%',它在可能不安全的位置 '%position%' 有原始指標參數,檢查傳遞的值正確無誤是呼叫者的責任。 建議在 gsl::span 中將範圍換行,以 span 迭代器 (stl.1) 的方式傳遞

備註

寫入超出界限是導致遠端程式碼執行弱點的主要原因之一。 其中一個補救方法是使用已檢查界限的資料結構,例如 gsl::span。 這個警告識別的是,標準範本程式庫 (STL) 演算法執行輸出範圍形式之原始指標的案例。 原始指標界限未經檢查。 若要避免弱點,請改用 gsl::span

程式碼分析名稱:NO_RAW_POINTER_IN_STL_RANGE_CHECKED

範例

下列程式碼示範未定義的行為,因為沒有任何界限檢查,而且 copy_if 寫入超出提供的儲存體。

void f()
{
    std::vector<int> myints = { 10, 20, 30, 40, 50, 60, 70 };
    int mydestinationArr[7] = { 10, 20, 80 };

    std::copy_if(myints.begin(), myints.end(), mydestinationArr, [](int i) { return !(i<0); }); // Warning: C26459
}

若要修正警告,請使用 gsl::span 確定輸出範圍經過檢查:

void f()
{
    std::vector<int> myints = { 10, 20, 30, 40, 50, 60, 70 };
    int mydestinationArr[7] = { 10, 20, 80 };
    gsl::span<int> mySpan{mydestinationArr};

    std::copy_if(myints.begin(), myints.end(), mySpan.begin(), [](int i) { return !(i<0); }); // No warning
}