[英]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.