【问题标题】:Why increment a pointer casuing crash?为什么增加导致崩溃的指针?
【发布时间】:2019-04-01 06:11:29
【问题描述】:

我正在学习如何在 C++ 编程中分配和释放内存。我尝试增加我的指针,然后使用删除。它崩溃了!为什么会这样?

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

*pint = 3;
*pDouble = 3.5; 

pint++;
pDouble++;

delete pint;
delete pDouble;

【问题讨论】:

  • 你不能delete 不是newed。
  • “我朝自己的腿开了一枪。好痛!为什么会这样?”
  • @VTT 谢谢,很清楚

标签: c++ pointers memory-management


【解决方案1】:

问题

int *pint = new int ;

动态分配一个int。后来,

pint++;

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

pDouble++;

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

解决方案

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

【讨论】:

  • 谢谢,这个解释清楚,可以帮助我理解指针和内存管理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多