Почему меняется значение переменной после передачи значения в функцию (C++)?

Искал ответ, и не понимаю почему так может быть.Вот цитата с источника:
В первом примере этого урока мы передавали в функцию аргументы по значению. Это значит, что когда функция вызывается, ей передаются в качестве фактических параметров (аргументов) не указанные переменные, а копии значений этих переменных. Сами переменные к этим копиям уже никакого отношения не имеют. В вызываемой функции эти значения присваиваются переменным-параметрам, которые, как известно, локальны. Отсюда следует, что изменение переданных значений никакого влияния на переменные, переданные в функцию при вызове, не оказывают.

void input_array(int n, double *array) {
    //Ввод элементов массива
    for (int i = 0; i < n; i++) {
        cout << "(Ввод массива) M[" << i << "] : ";
        cin >> array[i];
    }
}
int main() {
    int count;
    int n;
    cout << "Введите колчество элементов. n : ";
    cin >> n;
    double array[n-1]; //Обьявление массива с заданным количеством n
    cout << endl << n << endl;
    input_array(n, array);
    cout << endl << n << endl;

    return 0;
}

Первоначально, вводим, например 3
Первый вывод дает, как и должно быть 3
Второй дает рандомное значение.
  • Вопрос задан
  • 606 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
У вас в input_matrix выход за границы массива: в массиве n-1 элемент, а вы читаете n.

Массив лежит на стеке, там же где локальная переменная n. Так получилось, что n лежит сразу за matrix (или в пределах восьми байт) и оказывается испорчена. Данные кажутся вам случайными, потому что читаете вы double и какая-то его часть попадает в область памяти int n.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Zoominger
@Zoominger
System Integrator
Вы динамический массив неправильно создаёте.
https://ravesli.com/urok-86-dinamicheskie-massivy/

И это не матрица, а одномерный массив.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы