簡體   English   中英

刪除動態數組

[英]delete dynamic array

我必須編寫一個程序,在其中使用動態數組:

int size=1;
double* dyn_arr = new double[size];

int n=0; 
double sum=0.0;
while(std::cin >> dyn_arr[n]){
    sum = sum + dyn_arr[n++];
    if(n==size){
        size*=2;
        double* new_array = new double[size];
        std::copy(dyn_arr, dyn_arr + n, new_array);
        delete[] dyn_arr;
        dyn_arr = new_array;
    }
}

delete[] dyn_arr之后,我無法理解dyn_arr = new_array部分。 dyn_arr是數組dyn_arr的第一個元素上的dyn_arr ,不是嗎? 我如何刪除指針/數組並再次寫入dyn_arr = new_array

dyn_arr變量是“ pointer to double”類型的變量。 這意味着它擁有一個雙精度型的地址,您可以隨時更改它所指向的雙精度型。

double* dyn_arr = new double[size];

現在, dyn_arr指向size double的第一個。

double* new_array = new double[size];

這將創建一個類型為“ pointer to double”的新變量,該變量指向新的double數組的第一個。

delete[] dyn_arr;

這將刪除dyn_arr指向的雙dyn_arr數組。 由於我們從new[]獲得了dyn_arr的值,因此在完成數組處理后可以將其傳遞給delete[] 因此,現在dyn_arr指向垃圾,我們不能再使用它的值。

dyn_arr = new_array;

這會更改dyn_arr的值,因此它指向我們分配的新的雙打集。 由於dyn_arr是指針類型的變量,因此我們可以隨時更改它以指向不同的對象。

delete[] dyn_arr;

您不是在“刪除指針”。 您正在“刪除”它過去指向的內存。 現在它什么都沒有指向。 晃來晃去。

dyn_arr = new_array;

現在,您將指針指向新的內存塊。

new_array是在if語句內部創建的新動態數組。 有問題的dyn_array刪除原始數組,然后分配dyn_array指向新數組。

delete[] dyn_arr;     // <--- Delete the old array.
dyn_arr = new_array;  // <--- Point dyn_arr at the newly allocated array.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM