Получение ошибки - ссылка на локальную переменную перед инициализацией - PullRequest
0 голосов
/ 21 февраля 2019

Я написал простую функцию, которая читает указатель на массив.Он смотрит на элементы массива и сравнивает смежные значения на равенство.Если они равны, это добавляет их значение к «сумме»

. Я получаю ошибку во время выполнения, сообщающую, что перед локальной инициализацией была указана ссылка на «локальную» сумму ».Я не понимаю этого, потому что сумма определенно инициализируется в моей функции.Смотрите фрагмент кода.

int arrRead (char *Pinput){

    int sum, a, b = 0;

    while (*Pinput){
        a = *Pinput;
        ++Pinput;
        b = *Pinput;
        if(a == b)
            sum += a;
    }
    return sum;
}

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Вы не инициализируете sum с

int sum, a, b = 0;

Инициализируется только b.Вам также нужно добавить инициализатор для sum.

int sum=0, a=0, b = 0;
0 голосов
/ 21 февраля 2019

Оператор += добавляет значение правой стороны к значению левой стороны, а затем сохраняет сумму обратно в значение левой стороны.

Если sum не инициализирован, вызывается операция sum += Xнеопределенное поведение;результат зависит от предыдущего значения sum.

0 голосов
/ 21 февраля 2019
int sum, a, b = 0;

только здесь b инициализируется с 0.

sum и a неинициализированы.

Вам необходимо написать:

int sum = 0, a = 0, b = 0;

Или каждая переменная в отдельной строке:

int sum = 0;
int a = 0;
int b = 0;

Даже если технически в вашей функции только инициализируется sum, чтобы алгоритм работал, очень хорошая практика инициализировать все переменные при объявлении.


Еще одно хорошее предложение @melpomene - сузить область видимости переменных.Например, a и b используются только в цикле while:

int sum = 0;

while (*Pinput){
    int a = *Pinput;
    ++Pinput;
    int b = *Pinput;
    if(a == b)
        sum += a;
}
return sum;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...