在cpp中创建数组

时间:2012-02-12 02:53:51

标签: c++ arrays

我正在尝试在我的项目中创建一个新数组

代码是:

#include <iostream>
using namespace std;
void makeArray( int *& arrayPtr, int size );
int main( )
{
  int * arrPtr;
  int size =10;
  makeArray( arrPtr, size );
  for(int j=0;j<size;j++)
  {
    cout<<arrPtr[j]<<endl;
  }
}
void makeArray( int *& arrayPtr, int size )
{
  int arr[size-1];
  for(int i=0;i<size;i++)
  {
    arr[i]=0;
  }

  *&arrayPtr=*&arr;
}

根据要求我需要使用上面的“makeArray”方法来制作数组。 当我运行代码时,输​​出是垃圾值不是零.....

任何帮助将不胜感激

谢谢

3 个答案:

答案 0 :(得分:4)

创建数组的方式是在堆栈上,这意味着在makeArray函数完成后它将不存在。

您需要在堆上分配数组。

所以:

int arr[size-1];

应该是:

int *arr = new int[size-1];

另外,我认为你的意思是在makeArray()中执行此操作:

arrayPtr = arr;

而不是:

*&arrayPtr=*&arr;

在这种情况下编译但是更复杂并且在功能上是相同的。

但是你可能更喜欢只返回一个int *而不是引用指针。

然后当你在main()中使用数组时,将它设置为NULL,以防你不小心再次使用它,如下所示:

for(int j=0;j<size;j++)
{
  cout<<arrPtr[j]<<endl;
}
delete [] arrPtr;
arrPtr = NULL;

答案 1 :(得分:0)

为什么要将参数声明为'int *&amp; arrayPtr“?你只需要一个指向数组的指针吗?你应该使用'int * arrayPtr'代替。

要回答你的问题,问题是你在函数makeArray的堆栈中声明了一个数组。完成一个函数后,该函数的堆栈将被销毁,因此您将传递垃圾数据的地址。为避免这种情况,请改为使用动态内存分配。

编辑:此外,您应该使用memset而不是for循环将数组归零。它快得多。

答案 2 :(得分:0)

您在“makeArray()”中分配的“arr”是本地的。当函数结束时,数组就会被释放。当你回到主要时,你会得到垃圾。 你想要做的是使用“new”运算符来分配这个新数组,以便在所有程序中使用,除非你通过“delete”释放这个内存。 所以你可以将你的makeArray()设置为:

int* makeArray(int size )
{
  int *arr = new[size];
  for(int i=0;i<size;i++)
  {
    arr[i]=0;
  }

  return arr;
}

您需要通过以下方式初始化您的arry:

int * arrPtr = makeArray(10);

只是不要忘记在finsh之后释放这个记忆:

删除[] arrPtr;