поэтому мне нужно выделить массив int внутри функции. Массив объявляется перед вызовом функции (мне нужно использовать этот массив вне функции), и размер определяется внутри функции. Является ли это возможным? Я много чего пытался, но пока ничего не работало.
Спасибо за помощь ребята ! Вот какой код:
void fillArray(int *array)
{
int size = ...//calculate size here
allocate(array, size);
//....
}
void alloc(int * &p, int size)
{
p = new int[size];
}
int main()
{
//do stuff here
int *array = NULL;
fillArray(array);
// do stuff with the filled array
}
Если я правильно понял, вы не объявляли массив перед вызовом функции. Кажется, что вы указали указатель на int вместо массива. В противном случае, если вы действительно объявили массив, вы не можете изменить его размер и выделить память в функции.
Для выполнения этой задачи существует по крайней мере три подхода. Первый выглядит
int *f()
{
size_t n = 10;
int *p = new int[n];
return p;
}
И функция n называется
int *p = f();
Другой подход заключается в объявлении параметра функции как типа указателя на указатель на int. Например
voif f( int **p )
{
size_t n = 10;
*p = new int[n];
}
и функцию можно вызвать как
int *p = NULL;
f( &p );
Третий подход - использовать ссылку на указатель как параметр функции. Например
voif f( int * &p )
{
size_t n = 10;
p = new int[n];
}
и функция называется подобной
int *p = NULL;
f( p );
Лучше всего использовать стандартный класс std::vector<int>
вместо указателя. Например
void f( std::vector<int> &v )
{
size_t n = 10;
v.resize( n );
}
и функцию можно вызвать как
std::vector<int> v;
f( v );
Также вы можете использовать интеллектуальный указатель, такой как std::unique_ptr