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

Why increment a pointer casuing crash?

本文关键字:崩溃 指针 增加 为什么      更新时间:2023-10-16

我学习了在c++编程中分配和释放memroy。我尝试增加指针,然后使用delete。它坠毁了!为什么会发生这种情况?

int *pint = new int ;
double *pDouble = new double;
*pint = 3;
*pDouble = 3.5; 
pint++;
pDouble++;
delete pint;
delete pDouble;

问题

int *pint = new int ;

动态分配单个int。后来,

pint++;

增加指针,而不是值。增加指针使指针前进一个元素,因此pint++pint中的地址前进一个int,以指出所分配的内容的边界之外。尝试访问或delete所指向的内容将调用Undefined Behavior,并且很可能导致程序崩溃。

pDouble++;

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

解决方案

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