Неинициализированная переменная (uninitialized variable)— это такая переменная, которой не было присвоено начальное значение.
Использование неинициализированных переменных схоже с использованием неинициализированной памяти и может приводить к ошибкам разного рода в процессе работы программы.
Примером может служить такой код:
int Sum(int n)
{
int sum, i;
for (i = 0; i < n; i++)
{
sum = sum + 1;
}
return sum;
}
Переменной 'sum' не присвоено начального значения, и она содержит "мусор". В отдельных случаях, при определенном везении, там может оказаться и нулевое значение. Тогда функция будет работать правильно. Но в общем случае, результат работы функции непредсказуем. Коварство подобных ошибок в том, что программа может долгое время вести себя правильно. А потом, после смены компилятора, небольшого рефакторинга и других изменений, начать выдавать ошибочные результаты. Более того, при каждом запуске программа может вести себя по-разному.
Для предотвращения подобных ошибок в языке программирования Си++ лучше инициализировать все переменные начальным значением непосредственно при объявлении. Объявлять переменные лучше всего непосредственно перед использованием, когда уже известны их начальные значения. Тогда работоспособный пример кода будет выглядеть так:
int Sum(int n)
{
int sum = 0;
for (int i = 0; i < n; i++)
{
sum = sum + 1;
}
return sum;
}
Анализатор PVS-Studio умеет ряд диагностик, которые позволяют обнаруживать некоторые ошибки, связанные с использование неинициализированных переменных. Например: V573, V614.
0