Почему элементы массива меняются при каждом вызове функции? И как сделать правильно?
int *read_array(int N) // Функция вводящая элементы и размерность динамического массива (от 1 до N)
{
int *read_array = new int[N];
for (int i = 0; i < N; i++)
{
read_array[i] = rand() %20-10; // Генерация чисел от -10 до 10
}
return read_array;
}
void print_array(int read_array[],int N)// Вывод элементов динамического массива в прямом порядке
{
cout << "\nВывод массива в прямом порядке из " << N << " элементов" << endl;
for (int i = 0; i < N; i++)
{
cout << read_array[i] << endl;
}
}
void print_array_rev(int read_array[], int N)// Вывод элементов динамического массива в прямом порядке
{
cout << "\nВывод массива в обратном порядке из " << N << " элементов" << endl;
for (int i = (N-1); i > 0; i--)
{
cout << read_array[i] << endl;
}
}
int main()
{
setlocale(LC_ALL, "Russian");
int N = 0; //количество элементов массива, количество элементов в массиве
cout << "Введите размерность и количество элементов массива" << endl;
cin >> N;
cout << "Введенное число = " << N << endl;
read_array(N); // Функция вводящая элементы и размерность динамического массива
print_array(read_array(N), N); // Вывод элементов динамического массива в прямом порядке
print_array_rev(read_array(N), N); // Вывод элементов динамического массива в обратном порядке
Ответы (1 шт):
Автор решения: EOF
→ Ссылка
В main Ваша read_array возвращает массив в пустоту. Нужно сохранить возвращаемый ею указатель, который потом передавать другим функциям:
int* arr = read_array(N);
print_array(arr, N);
print_array_rev(arr, N);
Вы же каждый раз создавали новый массив вызывая функцию read_array. Это, кстати, приводит к утечке памяти. Не забывайте освобождать её с помощью delete[].