Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
użyto niezainicjowanej zmiennej lokalnej "name"
Uwagi
Użyto nazwy zmiennej lokalnej, czyli odczytanej z, zanim została przypisana wartość. W językach C i C++zmienne lokalne nie są domyślnie inicjowane. Niezainicjowane zmienne mogą zawierać dowolną wartość, a ich użycie prowadzi do niezdefiniowanego zachowania. Ostrzeżenie C4700 prawie zawsze wskazuje usterkę, która może powodować nieprzewidywalne wyniki lub awarie w programie.
Aby rozwiązać ten problem, możesz zainicjować zmienne lokalne po ich zadeklarowaniu lub przypisać do nich wartość przed ich zastosowaniem. Funkcja może służyć do inicjowania zmiennej, która jest przekazywana jako parametr odwołania, lub gdy jego adres jest przekazywany jako parametr wskaźnika.
Opcja kompilatora /sdl (Włącz dodatkowe kontrole zabezpieczeń) podnosi to ostrzeżenie do błędu.
Przykład
Przykład ten generuje kod C4700, gdy zmienne t, u, i v są używane przed ich zainicjowaniem, oraz pokazuje rodzaj śmieciowej wartości, która może się pojawić. Zmienne x, yi z nie powodują ostrzeżenia, ponieważ są inicjowane przed użyciem:
// 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;
}
Po uruchomieniu tego kodu , t, ui v są niezainicjowane, a dane wyjściowe dla elementu s są nieprzewidywalne:
Value in s: 37816963
Value in w: 42