2014-10-30 96 views
-3

下面的代碼片段是我嘗試將數組大小增加一倍。我遇到了幾個問題。最重要的是,我應該在我的原始數組上調用delete嗎?加倍C++數組的大小

void enlarge(int *array, int* dbl int size) { 
    for (int i = 0; i < size; i++) 
     dbl[i] = array[i]; 
    delete array; 
    array = dbl; 
} 
+3

'for(int i = 0; i Galik 2014-10-30 18:14:19

+4

爲什麼不使用'std :: vector '? – cdhowie 2014-10-30 18:15:00

+1

不使用[vector](http://www.cplusplus.com/reference/vector/vector/)的任何特定原因? – Michael 2014-10-30 18:15:06

回答

1

關鍵字雙不能作爲變量名,前一陣必須在新的分配被刪除,會被分配到相同的指針和循環應該複製大小沒有從上一個陣列(而不是2 *大小)

項目
void enlarge(int **array, int size) { 
    int *d = new int[size*2]; 
    for (int i = 0; i < size; i++) 
     d[i] = *array[i]; 
    delete [] *array; 
    *array = d; 
} 

如果前一陣是INT *改編,和大小是陣列ARR的currentsize,電話應爲:enlarge(&arr, size)

6

你有幾個問題:

  • 修改array只修改指針的本地副本。如果您希望修改被調用代碼觀察到,則需要使用參考指針。
  • 刪除使用new[]分配的東西時,需要使用delete[]
  • 您嘗試複製太多項目,並且這樣做會超出原始數組。

void enlarge(int *& array, int size) { 
//    ^
// Use a reference to a pointer. 

    int *dbl = new int[size*2]; 
    for (int i = 0; i < size; i++) { 
    //    ^
    // Iterate up to size, not size*2. 
     dbl[i] = array[i]; 
    } 
    delete[] array; 
    // ^
    // Use delete[], not delete. 
    array = dbl; 
} 

不過,我會強烈建議使用std::vector<int>代替;它會根據需要自動調整大小,這對您來說是完全透明的。