2014-02-10 206 views
0

我一直在試圖調整這個數組的大小,它編譯得很好,但是當我運行它時,我得到了這個非常長的錯誤信息。C++調整動態數組大小

下面是該函數的代碼:

void arrayClass_Namespace::arrayClass::resize(int newSize) 
{ 
    std::cout << "\nPlease input a new size for the array: "; 
    std::cin >> newSize; 

    assert(newSize < MAX_SIZE); 

    int *resize_arr = new int[newSize]; 
    for(int index = 0; index < size; index++) 
    { 
     resize_arr[index] = arr[index]; 
    } 

    size++; 
    arr = resize_arr; 
    delete[] resize_arr; 
} 

下面是更新代碼,現在工作完全正常:

void arrayTools_GabriellaRamirez::arrayTools::resize(int newSize) 
{ 
    std::cout << "\nPlease input a new size for the array: "; 
    std::cin >> newSize; 

    assert(newSize < MAX_SIZE); 

    int *resize_arr = new int[newSize]; 
    for(int index = 0; index < size; index++) 
    { 
     resize_arr[index] = arr[index]; 
    } 

    for(int index = size; size < newSize; index++) 
    { 
     size++; 
    } 

    for(int index = size; size > newSize; index++) 
    { 
     size--; 
    } 

    delete [] arr; 
    arr = resize_arr; 
} 
+3

如果您使用'std :: vector arr'而不是'int * arr',這些問題就會消失。 –

+2

將來請發佈錯誤信息。 「非常長的錯誤信息」並不能幫助未來的訪問者。 – 2014-02-10 01:49:36

+0

@Robᵩ'std :: cout <<「\ n請爲該數組輸入一個新的大小:」;'我不認爲他在這裏需要生產代碼,只是練習。 – user3286380

回答

6

delete[] resize_arr被刪除您所做的新的數組。你需要做的

delete[] arr; 
arr = resize_arr; 

順便說一句,你不檢查,以確保新的數組大小不小於used所以你可能寫出來的新數組的邊界。

另外我認爲size++是不正確的。

+0

太棒了!非常感謝!現在工作得很好。 – user3062299