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
→ Ссылка
Она у вас и так работает. Кроме одного момента - вы создаете локальный массив в функции, и он уничтожается при выходе. Поэтому возвращение указателя на этот массив - ошибка, приводящая к неопределенному поведению. Тут возможны варианты:
- Создать массив до вызова функции и передать в неё указатель и размер
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;
}
- Создать массив динамически через оператор
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;
}
- Самый правильный способ, уже учитывающий правила управления временем жизни, умеющий не только копировать массивы но и перемещать - использование контейнеров стандартной библиотеки
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;
}