1

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

int main(){

int *p = new int[3];

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

delete p;

return 0;   
}
4

3 回答 3

3

*p++=0;这意味着:

  1. 将零字节写入sizeof(int)存储在p.
  2. 增加 的psizeof(int)

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

正如@FredLarson 也提到的,您必须使用delete [] p;才能删除数组。

另外,我建议您阅读指针、指针算术和前/后增量。从我们的权威 C++ 书籍指南和列表中挑选一本书。

于 2013-01-16T04:22:29.327 回答
1

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

delete p; // this has undefined behaviour

改为使用delete [] p;

于 2013-01-16T06:02:25.980 回答
0

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

于 2013-01-16T04:22:09.217 回答