[英]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;
意思是:
sizeof(int)
零字节写入存储在p
的地址。 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.