Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
niet-geïnitialiseerde lokale variabele 'naam' gebruikt
Opmerkingen
De lokale variabele naam is gebruikt, oftewel uitgelezen, voordat deze een waarde is toegewezen. In C en C++ worden lokale variabelen niet standaard geïnitialiseerd. Niet-geïnitialiseerde variabelen kunnen elke waarde bevatten en hun gebruik leidt tot niet-gedefinieerd gedrag. Waarschuwing C4700 geeft bijna altijd een bug aan die onvoorspelbare resultaten of crashes in uw programma kan veroorzaken.
U kunt dit probleem oplossen door lokale variabelen te initialiseren wanneer ze worden gedeclareerd of een waarde toe te wijzen voordat ze worden gebruikt. Een functie kan worden gebruikt om een variabele te initialiseren die wordt doorgegeven als referentieparameter of wanneer het adres wordt doorgegeven als een aanwijzerparameter.
Met de /sdl compileroptie (Aanvullende beveiligingscontroles inschakelen) wordt deze waarschuwing uitgebreid naar een fout.
Example
In dit voorbeeld wordt C4700 gegenereerd wanneer de variabelen `t`, `u` en `v` worden gebruikt voordat ze zijn geïnitialiseerd, en wordt getoond welke rommelwaarde daarvan kan resulteren. Variabelen x, yen z veroorzaken de waarschuwing niet, omdat ze worden geïnitialiseerd voordat ze worden gebruikt:
// c4700.cpp
// compile by using: cl /EHsc /W4 c4700.cpp
#include <iostream>
// function takes an int reference to initialize
void initialize(int& i)
{
i = 21;
}
int main()
{
int s, t, u, v; // Danger, uninitialized variables
s = t + u + v; // C4700: t, u, v used before initialization
std::cout << "Value in s: " << s << std::endl;
int w, x; // Danger, uninitialized variables
initialize(x); // fix: call function to init x before use
int y{10}; // fix: initialize y, z when declared
int z{11}; // This C++11 syntax is recommended over int z = 11;
w = x + y + z; // Okay, all values initialized before use
std::cout << "Value in w: " << w << std::endl;
}
Wanneer deze code wordt uitgevoerd, zijn t, u, en v niet-geïnitialiseerd, en is de uitvoer voor s onvoorspelbaar.
Value in s: 37816963
Value in w: 42