更改数字时出现问题

Problems changing numbers

本文关键字:问题 数字      更新时间:2023-10-16

寻找一些家庭作业帮助。 不是为了答案,只是为了朝着正确的方向推动。 我们得到一个数组,其中包含一些数字、数组的大小以及我们将其加倍的次数。 我们要将大小加倍,复制相同的数字,然后将后半部分的数字乘以 2。

因此,如果数组是 {0,1} 且编号为 2。最后一个数组将是 {0,1,0,2,0,2,0,4}。

我的代码编译正确并返回一些非常奇怪的数字,对于原始数组 {0,1} 和数字 3,它给了我一堆 0 和中间的随机135057。

这是我的代码:

int *ArrayDynamicAllocation(int array[], int size, int number)
{
    for (int runs = 1;runs < number; runs++) {
        int new_size = size * 2;
        int *new_array = new int[new_size];
        for (int x = 0;x < size; x++) {
            new_array[x] = array[x];
        }
        for (int y = size+1; size < new_size; size++) {
            new_array[y] = array[y];
        }
        size = new_size;
        array = new_array;
        delete [] new_array;
    }
    return array;
}

正如@Elvisjames评论中所说,array = new_array;意味着您将指向新创建的new_array内存的指针分配给arraydelete [] new_array;意味着您要从内存中删除new_arrayarray。由于以前的分配,array指向new_array,删除new_array意味着删除array

因此,最好先删除旧数组,然后将新创建的数组分配给旧数组。

在此循环中:

for (int y = size+1; size < new_size; size++) 
{
     new_array[y] = array[y];
}

正如@Elvisjames评论中所说,new_array[y] = array[y];没有array[y]

您应该按如下方式定义ArrayDynamicAllocation函数:

int *ArrayDynamicAllocation(int array[], int& size, int number)
{
    for (int runs = 1;runs < number; runs++) 
    {
        int new_size = size * 2;
        int *new_array = new int[new_size];
        for (int x = 0;x < size; x++) 
        {
            new_array[x] = array[x];
            new_array[x+size]=2*array[x];
        }
        size = new_size;
        // Here you should delete the old array first then assign the newly created array to the old array.
        //array = new_array;
        //delete [] new_array;  
        delete [] array;
        array = new_array;
    }
    return array;
}

我已将int size更改为int& size以了解新尺寸。