數位新的配置大小是帶正負號到不帶正負號縮小轉換的結果,如果帶正負號的值,可能會導致溢位。
此警告已在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;
}