未分配被释放的指针

Pointer being freed was not allocated?

本文关键字:指针 释放 分配      更新时间:2023-10-16

请告诉我第三行在做什么。

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. p的值增加sizeof(int)

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

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

另外,我建议你仔细阅读指针、指针算术和前后递增。从我们的c++图书指南和列表中选择一本书

数组中的第一个元素被设置为0,并且p超前1以指向第二个元素。

delete p; // this has undefined behaviour

使用delete [] p;代替。

将p[0]设置为0,并将指针移动到p[1]。你想干什么?