Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Matrisens nya allokeringsstorlek är resultatet av en signerad till osignerad begränsad konvertering som kan leda till spill om det signerade värdet är negativt.
Den här varningen lades till i Visual Studio 2022 version 17.13.
Anmärkningar
Rapporter om att storleken som angetts för en matris new
allokering kan vara resultatet av konverteringen av ett eventuellt negativt signerat värde till ett osignerat värde. Till exempel:
int* CreateIntArray(int size)
{
int* intArray = new int[size];
return intArray;
}
Uttrycket new int[size]
, size
är signerat. Kompilatorn konverterar det signerade värdet till ett osignerat värde för att beräkna hur många byte som ska allokeras för matrisen. När size
är negativt kan resultatet av den beräkningen spillas över eller få oväntade resultat när det skickas till new
.
Den här kontrollen är samma som C26838
, men gäller endast för new T[]
.
Den här kontrollen kan ibland inte identifiera att vissa kontroller kan förhindra spill eftersom kontrollen är konservativ.
Exempel
Om du vill åtgärda det tidigare kodexemplet där storleksberäkningen kan spillas över på grund av ett negativt signerat värde, introducerar du en kontroll för att säkerställa att den inte gör det. Till exempel:
int* CreateIntArray(int size)
{
if (size < 0)
return nullptr;
int* intArray = new int[size];
return intArray;
}