删除char数组。另类方式?

时间:2011-08-18 16:38:24

标签: c++

  

可能重复:
  Is it necessary to call delete[] vs delete for char arrays?

char *p = new char[200];

delete p;

这种(我更改了var名称)代码来自一个大型商业项目。

第三行。这是正确的吗? 我应该改变它还是留在那里。 Coz没有错误报告,这个程序运行超过4年。

感谢。

4 个答案:

答案 0 :(得分:5)

使用delete[]因为您使用了new[],所以它不是替代方案。

delete [] p;

答案 1 :(得分:3)

  • 如果new使用[],则必须删除它:

    T *p = new T[100];
    delete [] p; //correct
    delete p   ; //incorrect
    
  • 如果new未使用[],则删除也不得使用它:

    T *p = new T;
    delete [] p; //incorrect
    delete p   ; //correct
    

不正确并不意味着您将收到编译错误;这也不意味着程序必须在运行时失败。这意味着,程序行为未定义;一切皆有可能,而且很可能会有内存泄漏。

答案 2 :(得分:2)

理论上,要遵循标准,第3行应为delete[] p;

但是,实际上这没有任何意义,因为char的析构函数什么都不做。

确实,删除和数组删除之间的区别在于,对于数组删除,析构函数被调用的次数与对象一样多。通过常规删除,析构函数只被调用一次。

最后,您应该将其替换为delete[] p;

答案 3 :(得分:1)

您分配了一个operator new[]的数组。您必须与operator delete[] operator delete平衡:

delete[] p;