2016-03-28 39 views
0

我想删除数组中的最后两个元素新的使用指针p创建如下:删除一组从一个数组元素的创建使用C++

double *p = new double[5]; 
for(int i=0;i<5;i++) 
    cin>>*(p+i); 

正常工作到这里的时候,我试图通过偏移指针p,然后使用删除以下方式

delete [] (p+3) 

它会编译但随后崩溃删除阵列中的最后两个元素。

这是允许的,如果是的话那么我哪里出错了?

感谢

+0

使用std :: vector的。 –

+0

您不能从最初分配的内存中删除个别职位。 –

+1

“这是否允许?”编号为 –

回答

3

在这份声明中

double *p = new double[5]; 

分配有一个内存范围。你不能删除它的一部分。

要解决此问题,您需要将旧数组的新元素分配给新数组,然后删除旧数组。

例如

double *q = new double[3]; 

std::copy(p, p + 3, q); 

delete [] p; 

p = q; 

如果数组的大小是可以改变的,最好是使用标准容器std::vector<double>

例如

std::vector<double> v(5); 

for (std::vector<double>::size_type i = 0; i < v.size(); i++) 
{ 
    std::cin >> v[i]; 
} 

//... 

v.erase(std::next(v.begin(), 3), v.end()); 

或者

v.erase(std::prev(v.end(), 2), v.end()); 
相关问题