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

时间:2013-01-16 04:17:58

标签: c++ pointers

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

int main(){

int *p = new int[3];

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

delete p;

return 0;   
}

3 个答案:

答案 0 :(得分:3)

*p++=0;表示:

  1. sizeof(int)零字节写入存储在p
  2. 中的地址
  3. p增加sizeof(int)的值。
  4. 换句话说 - 你已经增加了指针,然后传递给delete的内容与运算符new[]返回的内容不同。

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

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

答案 1 :(得分:1)

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

delete p; // this has undefined behaviour

请改用delete [] p;

答案 2 :(得分:0)

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