删除动态数组

Sus*_*lik 1 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

dyn_arr = new_array后面的部分看不懂delete[] dyn_arrdyn_arr是数组第一个元素的指针dyn_arr,不是吗?如何删除指针/数组并再次写入dyn_arr = new_array

Dav*_*rtz 5

dyn_arr变量是“指向 double 的指针”类型的变量。这意味着它保存了双精度数的地址,并且您可以随时更改它指向的双精度数。

double* dyn_arr = new double[size];
Run Code Online (Sandbox Code Playgroud)

现在,dyn_arr指向size双打的第一个。

double* new_array = new double[size];
Run Code Online (Sandbox Code Playgroud)

这将创建一个“双精度指针”类型的新变量,该变量指向新双精度数组的第一个。

delete[] dyn_arr;
Run Code Online (Sandbox Code Playgroud)

dyn_arr这将删除双精度指向的数组。由于我们dyn_arr从 中获取了 的值,因此我们可以在处理完数组后将new[]其传递给。delete[]所以现在dyn_arr指向垃圾,我们不能使用它的值。

dyn_arr = new_array;
Run Code Online (Sandbox Code Playgroud)

这改变了 的值,dyn_arr因此它指向我们分配的新的双精度集。由于dyn_arr是指针类型的变量,因此我们可以随时将其更改为指向不同的事物。