共用方式為


警告 C26839

數位新的配置大小是帶正負號到不帶正負號縮小轉換的結果,如果帶正負號的值,可能會導致溢位。

此警告已在Visual Studio 2022 17.13版中新增。

言論

報告為陣列所指定的大小 new 配置可能是將負號值轉換成不帶正負號值的結果。 例如:

int* CreateIntArray(int size)
{
    int* intArray = new int[size];
    return intArray;
}

表達式 new int[size]size 已簽署。 編譯程式會將帶正負號的值轉換為不帶正負號的值,以計算要配置給陣列的位元組數目。 當 size 為負數時,該計算的結果可能會在傳遞至 new時溢位或產生非預期的結果。

這項檢查與 C26838相同,但只適用於 new T[]

這項檢查有時無法辨識某些檢查可能會防止溢位,因為檢查是保守的。

若要修正先前的程式代碼範例,其中大小計算可能會因為負號值而溢位,請引入檢查以確保不會。 例如:

int* CreateIntArray(int size)
{
    if (size < 0)
        return nullptr;

    int* intArray = new int[size];
    return intArray;
}

另請參閱

C26831
C26832
C26838
C26838