在C++中将动态数组的大小加倍时遇到问题

Having trouble doubling the size of a dynamic array in C++

本文关键字:问题 遇到 C++ 动态 数组      更新时间:2023-10-16

我有一个将整数添加到数组的函数。如果空间用完,它应该将数组大小加倍,并在下一个空闲位置添加值。因此,例如,如果数组大小为 3,我输入 99、105 和 45。现在,如果我想添加 100,应该创建一个大小为 6 的新数组。下面是一段代码。 这一切都有效,我什至在它返回 100 的本地函数中显示 array[4]。当程序返回到 main 以再次显示菜单时,所有值都变为 -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 << "nnEnter a Number: ";
       cin >> newNumber;
       Array[sizeTrack] = newNumber;
       sizeTrack = sizeTrack++;

如果这是学校作业,你不能使用std::vector,那么你需要知道,通过将参数声明为int Array[],它实际上与int* Array相同。你有一个指针,在调用函数时,你传递一个指针的副本

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

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

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