无法在C ++中将动态数组的大小加倍

时间:2018-01-30 01:51:22

标签: c++ arrays pointers

我有一个向数组添加整数的函数。如果空间用完,它应该使数组大小加倍并在下一个空闲点添加值。因此,如果数组大小为3,我输入99,105和45.现在,如果我想添加100,则应创建一个大小为6的新数组。下面是一段代码。一切正常,我甚至在本地函数中显示数组[4],返回100.当程序返回主程序再次显示菜单时,所有值都变为-572662307。我花了好几天试图解决这个问题,但不能。有人可以帮忙吗?

    //Snippet from Main

    cout<<"Enter the size of the array to be created";
    cin >> size;
    int *myArray = new int[size]();
    add(myArray,Size);

    //Problematic Code 
    void add (int Array[], int size){
       int* temp = new int[size*2]; // create new Array 2x The Size

       for (int i = 0; i < size; i++) {
           temp[i] = Array[i];//Copy data over
       }


       delete [] Array;//Delete the old array
       Array = temp;

       cout << "\n\nEnter a Number: ";
       cin >> newNumber;

       Array[sizeTrack] = newNumber;
       sizeTrack = sizeTrack++;

1 个答案:

答案 0 :(得分:2)

如果这是学校作业而您无法使用std::vector,那么您需要通过将参数声明为int Array[]来了解它,它与int* Array完全相同。你拥有的是一个指针,并在调用该函数时传递指针的副本

最后一部分很重要:您传递变量中值的副本。这意味着,当您修改函数内的参数变量时,您只需修改副本。修改副本会使原始版本保持不变。

这里有两种可能的解决方案,您应该已经知道(通过您的教科书和课堂笔记)或者应该能够在您的教科书中找到:

  1. 返回新指针。
  2. 通过引用传递参数
相关问题