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.
Användning av oinitialiserad lokal variabel 'name'
Anmärkningar
Namnet på den lokala variabeln name har använts, det vill säga, lästs ifrån, innan den har tilldelats ett värde. I C och C++initieras inte lokala variabler som standard. Onitialiserade variabler kan innehålla valfritt värde och deras användning leder till odefinierat beteende. Varning C4700 indikerar nästan alltid en bugg som kan orsaka oförutsägbara resultat eller krascher i ditt program.
Du kan åtgärda problemet genom att initiera lokala variabler när de deklareras eller tilldela dem ett värde innan de används. En funktion kan användas för att initiera en variabel som skickas som en referensparameter eller när dess adress skickas som en pekarparameter.
Kompileringsalternativet (Aktivera ytterligare säkerhetskontroller) höjer varningen till ett fel./sdl
Example
Det här exemplet genererar C4700 när variabler , tuoch v används innan de initieras och visar vilken typ av skräpvärde som kan uppstå. Variabler x, yoch z orsakar inte varningen eftersom de initieras före användning:
// 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;
}
När den här koden körs, t, uoch v är onitialiserad och utdata för s är oförutsägbara:
Value in s: 37816963
Value in w: 42