请告诉我第三行在做什么。
int main(){
int *p = new int[3];
*p++=0; // What's this line doing?
delete p;
return 0;
}
*p++=0;
这意味着:
sizeof(int)
存储在p
.p
值sizeof(int)
。换句话说——你已经增加了指针,然后你传递给delete
的内容与 operator 返回的内容不同new[]
。
正如@FredLarson 也提到的,您必须使用delete [] p;
才能删除数组。
另外,我建议您阅读指针、指针算术和前/后增量。从我们的权威 C++ 书籍指南和列表中挑选一本书。
数组中的第一个元素设置为 0,p 前进 1 以指向第二个元素。
delete p; // this has undefined behaviour
改为使用delete [] p;
。
您正在将 p[0] 设置为 0 并将指针推进到 p[1]。你想做什么?