删除动态数组

时间:2016-05-12 08:59:58

标签: c++

我必须编写一个程序,我使用动态数组:

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

3 个答案:

答案 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.