2016-05-12 90 views
0

我必须写一个程序,其中,i使用动态阵列:删除动态数组

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_arraydelete[] dyn_arr之后。 dyn_arr是数组dyn_arr的第一个元素上的指针,不是吗?我如何删除指针/数组并再次写入dyn_arr = new_array

+0

我不知道我明白你在问什么。看起来你展示了如何在代码中做点什么,然后问如何去做。嗯..用你展示的代码。是否有一些代码的功能不理解?在delete [] dyn_arr之后的 –

+0

,dyn_arr指向的数组被释放,dyn_arr是一个悬挂指针。你可以重新分配给这个指针,例如'nullptr'或指向另一个有效地址的指针,比如'new_array' – BeyelerStudios

+0

谢谢你,那就是问题所在。我在理论部分看到它,但我想再次要求确认。 – Susliks

回答

4

dyn_arr变量是一个“指向double的指针”类型的变量。这意味着它拥有双倍的地址,您可以随时更改它指向的双倍。现在

double* dyn_arr = new double[size]; 

dyn_arr分第一的双打size

double* new_array = new double[size]; 

这创建类型“指向double”指向第一双打的新阵列的一个新的变量。

delete[] dyn_arr; 

这将删除指向dyn_arr指向的数组。由于我们从new[]得到了dyn_arr的值,所以当我们完成数组时,我们可以将它传递给delete[]。所以现在dyn_arr指向垃圾,我们不能使用它的值。

dyn_arr = new_array; 

这改变的dyn_arr的值,使之指向新盘双打中,我们分配了。由于dyn_arr是指针类型的变量,我们可以随时将其更改为指向不同的东西。

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. 
3
delete[] dyn_arr; 

你不是 “删除指针”。你正在“删除”它用来指向的内存。现在它没有指向任何东西。这是悬而未决的。

dyn_arr = new_array; 

现在您将指针指向新的内存块,而不是。