因此,如果数组为{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;
}
答案 0 :(得分:0)
正如@Elvisjames在评论中所说,array = new_array;
表示您将指向新创建的new_array
的内存的指针分配给array
,而delete [] new_array;
表示您正在删除两者来自记忆的new_array
和array
。由于之前的分配,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
。