2017-08-04 190 views
0

我正在努力弄清楚我出錯的地方。我的目標是將數組大小加倍,並將原始值兩次複製到新數組中。目前只打印出6個零。請幫忙!!動態數組和重複值

#include <iostream> 
using namespace std; 

void repeatArray(double *&myArray, int size) 
{ 
     double *repeatArray = new double[size * 2]; 

     for(int i =0; i < size; i++) 
     { 
       myArray[i] = repeatArray[i]; 
     } 

     delete [] myArray; 
     myArray = repeatArray; 
} 

int main() 
{ 
    double* myArray = new double[3]; 
    myArray[0] = 1; 
    myArray[1] = 2; 
    myArray[2] =3; 
    repeatArray(myArray, 3); 

    for (int i=0; i<6; i++) 
    { 
     cout << myArray[i] << endl; 
    } 
    delete []myArray; 
    return 0; 
} 
+0

'repeatArray()'不會改變size'的'的價值,所以循環只複製三個值。它只會將'repeatArray'中的值複製到'myArray',而它需要從'myArray'複製到'repeatArray'。 – Peter

回答

1

myArray[i] = repeatArray[i];是錯誤的。 repeatArray函數中應該是repeatArray[i] = myArray[i];

好吧,我錯過了副本的兩倍以上部分..

void repeatArray(double *&myArray, int size) 
{ 
     double *repeatArray = new double[size * 2]; 

     for(int i =0; i < size; i++) 
     { 
       repeatArray[i] = myArray[i]; 
       repeatArray[i+size] = myArray[i]; 
     } 

     delete [] myArray; 
     myArray = repeatArray; 
} 

這將拷貝過來corectly的值,並將它過來twicew

+0

謝謝!現在它只打印前3個值,然後再打零。我的循環不正確? –

+0

是的,你只分配了前3個值 –

+0

我將如何循環再次?我對如何將原始值複製到新陣列兩次感到困惑 –

0
for(int i =0; i < *size*; i++) 
     { 
       myArray[i] = repeatArray[i]; 
     } 

你的程序只打印3個值,因爲你沒有爲您的新陣列分配適當的值。問題是,你遍歷舊的大小,而不是大小* 2。

你可能應對這樣說:

for (int i = 0; i < size * 2; i++) 
{ 
    // The first part of the array 
    if (i < size) 
    { 
     // Copy values from another array 
     repeatArray[i] = myArray[i]; 
    } 
    // The second part of the array 
    else 
    { 
     // Copy valeus from the first part 
     repeatArray[i] = myArray[i - size]; 
    } 
} 
+0

因此,我將其更改爲循環遍歷新大小,並將第四個值是「3.21143e-322」 –

+0

第四個值是垃圾數據,因爲您的數組的大小爲3. – hoodaticus

+0

第5和第6個值是1和2,這不是垃圾。爲什麼只有第四個? –