【问题标题】:C++ Allocate dynamic array inside a function [closed]C ++在函数内分配动态数组[关闭]
【发布时间】:2015-01-10 07:19:55
【问题描述】:

所以我需要在函数内部分配一个 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
 }

【问题讨论】:

  • “数组是在调用函数之前声明的”——这意味着数组已经定义和分配。所以不清楚你想要达到什么目的。

标签: c++ vector pass-by-reference dynamic-memory-allocation function-definition


【解决方案1】:

如果我理解正确,您在调用函数之前没有声明数组。您似乎声明了一个指向 int 而不是数组的指针。否则,如果您确实声明了一个数组,那么您可能无法更改其大小并在函数中分配内存。

至少有三种方法可以完成这项任务。第一个看起来像

int *f()
{
    size_t n = 10;

    int *p = new int[n];

    return p;
}

函数的调用方式如下

int *p = f();

另一种方法是将函数的参数声明为具有指向 int 指针的指针类型。例如

void f( int **p )
{
    size_t n = 10;

    *p = new int[n];
}

函数可以像这样调用

int *p = nullptr;

f( &p );

第三种方法是使用对指针的引用作为函数参数。例如

void f( int * &p )
{
    size_t n = 10;

    p = new int[n];
}

函数的调用方式如下

int *p = nullptr;

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这样的智能指针

【讨论】:

  • 这几乎是我所需要的。我想我没有很好地解释我的问题。所以,我的 main 函数中有 int 的 arrya。然后我需要调用一个函数 A() ,该函数将这个空数组作为参数,该函数将计算大小,然后分配并填充数组。之后,我可以在我的主函数中使用我填充的数组
  • @kevin labille 正如我在帖子中所写,您可能没有定义一个空数组。您可以定义一个指针,然后在函数中为数组分配内存并将其地址分配给指针,如我在帖子中所示。
  • 我确实尝试了第一个和第二个解决方案,但没有奏效。我应该如何将数组传递给应该填充它的函数?现在我已经在 main 中声明了数组,然后我将它传递给我的函数,然后我调用你的第二个方法来分配它,在那个函数中
  • @kevin labille 我已经写过你不能声明一个数组并在函数中重新分配它。请参阅我的帖子如何调用该函数。
  • 好吧,第三种方法有效 :) 我的函数 fillArray 被声明为 void fillArray(int *array) 而不是 void fillArray(int* &amp;array) 谢谢弗拉德
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
相关资源
最近更新 更多