Присвоение значения int, переданному по ссылке, останавливает выполнение программы - PullRequest
0 голосов
/ 22 апреля 2019
void assignVal(int *loopCount)
{
    //lots of stuff with print statements to know where func stop executing

    cout << "before assign resultCount" << endl;

    *loopCount = 3; //I want the loopSize int in the main function to be equal to 3;

    cout << "after assign resultCount" << endl;

    return;
}

int main() 
{
    int loopSize;

    assignVal(&loopSize);
    //Doesn't get here or below
    for(int i = 0; i < loopSize; i++)
    {
        cout << i << endl;
    }
}

Я пытаюсь передать переменную loopSize, которая будет назначена внутри функции assignVal(int*). У меня нет контроля над основной функцией, это для хакерка (это явно не код из проблемы, я просто показываю сильно измененную версию небольшой части, которая не работает для меня. Я также не имею никакого контроля над assignVal(int*) сигнатура функции. Мне нужно получить это int *, изменить его внутри функции, а затем просто вернуться. Я не знаю, почему это не работает, так я бы это делал где-то еще. 1005 * "после присвоения resultCount" никогда не печатается, и программа прекращает выполнение там. Я могу подтвердить, что это компилируется.

Изменить: Следует отметить, что если я назначу loopCount, как это

int* arr = {3};
loopCount = arr;

Функция продолжает нормально работать, но значение вне функции по какой-то причине неверно.

1 Ответ

0 голосов
/ 22 апреля 2019

Не передается по ссылке, это указатель. Сырые указатели нуждаются в тщательном управлении, чтобы избежать проблем. Вы можете передать по ссылке, как это:

void assignVal(int & loopCount)

Вы можете прочитать больше здесь: В чем разница между передачей по ссылке и передачей по значению?

...