2015-01-21 79 views
0

正在尋找一些家庭作業幫助。不是爲了正確方向的微調而作出的答案。給我們一些數字,數組的大小和我們加倍的次數。我們要加倍的大小,複製相同的數字,然後乘以第二半數字。更改號碼的問題

所以如果數組是{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; 
} 
+1

你們兩個真的需要網絡會議:[看到這個問題](http://stackoverflow.com/questions/28059689/function-to-double-size-of-array-arbitrary-number-of-times) – WhozCraig 2015-01-21 04:58:49

+1

'array = new_array;''delete [] new_array;'你將指向新創建的'new_array'的指針指向'array'並刪除內存。 – Elvisjames 2015-01-21 06:05:42

+1

'new_array [y] = array [y];'沒有'數組[y]' – Elvisjames 2015-01-21 06:11:50

回答

0

由於@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