繁体   English   中英

被释放的指针没有被分配?

[英]Pointer being freed was not allocated?

请告诉我第3行正在做什么。

int main(){

int *p = new int[3];

*p++=0; // What's this line doing?

delete p;

return 0;   
}

*p++=0; 意思是:

  1. sizeof(int)零字节写入存储在p的地址。
  2. 通过sizeof(int)增加p的值。

换句话说 - 你已经增加了指针,然后传递给delete的内容与operator new[]返回的内容不同。

正如@FredLarson所提到的,你必须使用delete [] p; 为了删除一个数组。

另外,我建议你阅读指针,指针算术和前/后增量。 从我们的Definitive C ++ Book Guide and List中选择一本书。

数组中的第一个元素设置为0,p先前一个指向第二个元素。

delete p; // this has undefined behaviour

使用delete [] p; 代替。

您将p [0]设置为0并将指针前进到p [1]。 你想做什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM