动态数组的双倍大小

时间:2018-06-18 02:55:52

标签: c++ arrays c++11

我真的不确定为什么这不起作用。这就像阵列大小不会倍增。我确定我所遗漏的内容很简单,但我无法弄清楚它为何无法正常运作。

void add_element(int* &array, int &size , int &count)
{
    int tempp;
    cout << "What number do you want to add ? " << endl;
    cin >> tempp;
    int temp = size * 2;
    int *newArr;
    newArr = new int[temp];
    if(count ==  size)
    {
        for (int i = 0; i < size; i++)
        {
            newArr[i] = array[i];

        }
        size = temp;
        delete[] array;

        ++count;
        newArr[count] = tempp;

        array = newArr;
    }
}

1 个答案:

答案 0 :(得分:1)

您的功能未正确实施,甚至没有关闭。

每次调用函数时都不应该分配一个新数组,只有当前数组不足以存储用户的数字时才会这样。

如果countsize不是相同的值,则表示您正在泄漏内存,并且您没有在现有数组中插入任何内容。

仅当countsize值相同时,您才会触摸数组,但是当您将用户的数字存储到新数组中时,您将其存储在错误的指数。

请改为尝试:

void add_element(int* &array, int &size, int &count)
{
    int number;
    cout << "What number do you want to add? " << endl;
    cin >> number;
    if (count == size)
    {
        int newSize = size * 2;
        int *newArr = new int[newSize];
        for (int i = 0; i < count; ++i)
        {
            newArr[i] = array[i];
        }
        delete[] array;
        array = newArr;
        size = newSize;
    }
    array[count] = number;
    ++count;
}