c++ - 删除动态数组

标签 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;
    }
}

我无法理解 delete[] dyn_arr 之后的部分 dyn_arr = new_arraydyn_arr 是数组 dyn_arr 的第一个元素的指针,不是吗?我如何删除指针/数组并再次写入 dyn_arr = new_array

最佳答案

dyn_arr 变量是一个“ double 指针”类型的变量。这意味着它保存着 double 的地址,您可以随时更改它指向的 double 。

double* dyn_arr = new double[size];

现在,dyn_arr 指向第一个 size double 。

double* new_array = new double[size];

这将创建一个“ double 指针”类型的新变量,指向新 double 组的第一个。

delete[] dyn_arr;

这会删除 dyn_arr 指向的 double 组。因为我们从 new[] 得到了 dyn_arr 的值,所以我们可以在处理完数组后将它传递给 delete[]。所以现在 dyn_arr 指向垃圾,我们不能使用它的值。

dyn_arr = new_array;

这会更改 dyn_arr 的值,使其指向我们分配的新 double 集。由于 dyn_arr 是一个指针类型的变量,我们可以随时更改它以指向不同的东西。

关于c++ - 删除动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37182040/

相关文章:

c++ - 从 Eclipse 调试 Visual Studio 构建

c++ - C++ 中 bool 函数没有引用参数?

c++ - 为什么没有 C++ 的 DELETE 宏的原因

c++ - 函数类型可以是类模板参数吗?

c++ - 二进制读/写运行时失败

c++ - 在堆栈已满并给出段错误之前,C/C++ 中的最大递归函数调用?

c++ - 如何使用 std::bind 将函数与对象指针参数绑定(bind)?

c++ - 命名空间和运算符解析

c++ - 如何将一串数字读入数组

c++ - 为什么复制构造函数被调用了两次?