我必须编写一个程序,我使用动态数组:
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;
}
}
我无法理解dyn_arr = new_array
之后的delete[] dyn_arr
部分。
dyn_arr
是数组dyn_arr
的第一个元素的指针,不是吗?如何删除指针/数组并再次写入dyn_arr = new_array
?
答案 0 :(得分:4)
dyn_arr
变量是类型&#34的变量;指向double"的指针。这意味着它保存了double的地址,你可以随时改变它指向的双倍。
double* dyn_arr = new double[size];
现在,dyn_arr
指向size
双打中的第一个。
double* new_array = new double[size];
这会创建一个类型为#34的新变量;指向double"这指向了新的双打数组中的第一个。
delete[] dyn_arr;
这将删除双精度dyn_arr
点数组。由于我们从dyn_arr
获得了new[]
的值,因此我们可以在完成数组后将其传递给delete[]
。所以现在dyn_arr
指向垃圾,我们不能使用它的价值。
dyn_arr = new_array;
这改变了dyn_arr
的值,因此它指向我们分配的新的双打组。由于dyn_arr
是指针类型的变量,因此我们可以随时将其更改为指向不同的内容。
答案 1 :(得分:3)
delete[] dyn_arr;
你不是“删除指针”。你正在“删除”它曾经指向的内存。现在它什么都没有。它晃来晃去。
dyn_arr = new_array;
现在你正在指针指向新的内存块。
答案 2 :(得分:1)
new_array
是在if
语句中创建的新动态数组。有问题的行正在删除原始数组,然后指定dyn_array
指向新数组。
delete[] dyn_arr; // <--- Delete the old array.
dyn_arr = new_array; // <--- Point dyn_arr at the newly allocated array.