C++ | Как создать массив, кол-во значений которого будет содежаться в переменной?

Как сделать так что-бы эта функция работала?

int *dae (int arr_count) {
int arr[arr_count];
for (int i = 0; i < arr_count; i++) {
arr[i] = i;
}
return arr;
}

Ответы (1 шт):

Автор решения: DmitryK

Она у вас и так работает. Кроме одного момента - вы создаете локальный массив в функции, и он уничтожается при выходе. Поэтому возвращение указателя на этот массив - ошибка, приводящая к неопределенному поведению. Тут возможны варианты:

  1. Создать массив до вызова функции и передать в неё указатель и размер
main()
{
    int arr[arr_count];
    dae( arr, arr_count);
}

int *dae (int* arr, int arr_count) 
{
    for (int i = 0; i < arr_count; i++)
        arr[i] = i;
    return arr;
}
  1. Создать массив динамически через оператор new[]. Главное потом не забыть удалить его где-то с помощью delete[]. А чтобы не заморачиваться с удалением (временем жизни) массива, используйте умные указатели std::unique_ptr() или std::shared_ptr().
int* dae (int arr_count) 
{
    int* arr = new int[arr_count];
    for (int i = 0; i < arr_count; i++)
        arr[i] = i;
    return arr;
}
  1. Самый правильный способ, уже учитывающий правила управления временем жизни, умеющий не только копировать массивы но и перемещать - использование контейнеров стандартной библиотеки std::vector<> и std::array<>
vector<int> dae(int arr_count) 
{
    vector<int> arr(arr_count);    
    for (int i = 0; i < arr_count; i++)
        arr[i] = i;
    return arr;
}
→ Ссылка