为什么要增加导致崩溃的指针?

时间:2018-10-27 21:24:00

标签: c++ pointers memory-management

我正在学习有关在c ++编程中分配和释放内存的知识。我试图增加指针,然后再使用delete。它坠毁了!为什么会这样呢?

int *pint = new int ;
double *pDouble = new double;

*pint = 3;
*pDouble = 3.5; 

pint++;
pDouble++;

delete pint;
delete pDouble;

1 个答案:

答案 0 :(得分:6)

问题

int *pint = new int ;

动态分配一个int。以后

pint++;

增加指针,而不是值。递增指针会使指针前移一个元素,因此pint++使pint中的地址前移一个int以指出已分配内容的范围。尝试访问或delete所指向的内容将调用未定义的行为,并且很可能导致程序崩溃。

pDouble++;

具有相同的效果,但是前进到下一个double

解决方案

除了不这样做之外,没有其他解决方案。如果需要增加指针,例如要遍历数组,请确保保留指向原始地址的指针,以便在完成操作后可以释放它。