我正在学习有关在c ++编程中分配和释放内存的知识。我试图增加指针,然后再使用delete。它坠毁了!为什么会这样呢?
int *pint = new int ;
double *pDouble = new double;
*pint = 3;
*pDouble = 3.5;
pint++;
pDouble++;
delete pint;
delete pDouble;
答案 0 :(得分:6)
int *pint = new int ;
动态分配一个int
。以后
pint++;
增加指针,而不是值。递增指针会使指针前移一个元素,因此pint++
使pint
中的地址前移一个int
以指出已分配内容的范围。尝试访问或delete
所指向的内容将调用未定义的行为,并且很可能导致程序崩溃。
pDouble++;
具有相同的效果,但是前进到下一个double
。
除了不这样做之外,没有其他解决方案。如果需要增加指针,例如要遍历数组,请确保保留指向原始地址的指针,以便在完成操作后可以释放它。