Поведение инициализации локальной переменной C

#c #c 11 #local-variables

Вопрос:

этот фрагмент кода:

 int findsmallerNumber(int low, int high, string *str)
{
    int counter = 0;
    string ss = *str;

    for(int i = low   1; i <= high; i  )
    {
        if(ss[i] < ss[low])
            counter  ;
    }
    cout<<counter<<" ";
    return counter;
}
 

выдает правильный вывод в виде:

 4 4 3 1 1 0
 

но когда переменная счетчика не инициализирована как таковая:

 int counter;
 

полученный результат является:

 4 8 11 12 13 13
 

Может кто-нибудь, пожалуйста, объяснить это поведение?

Комментарии:

1. кстати, неясно, как вывод с правильным кодом может начинаться с 4 ... counter того, когда 0

2. @463035818_is_not_a_number Извините, что cout не должен был там быть :(. Отредактировал его сейчас.

Ответ №1:

Может кто-нибудь, пожалуйста, объяснить это поведение?

Значение неинициализированной переменной не определено. Если вы читаете неопределенное значение, то поведение программы не определено. Это объясняет поведение, которое вы наблюдаете. Не считывайте неопределенные значения.