我正在使用一个同事编写的库,发现 valgrind
正在吐出与 delete
相关的错误。
问题是有像这样的字符数组分配
char* s = new char[n];
稍后跟进 delete s
而不是 delete[] s
他告诉我,区别实际上是 delete[] s
会在 s
中的每个位置调用对象的析构函数(如果它有的话),在这种情况不是因为它是原始类型。我相信这是真的。
所以 delete s 本身并不是真正的错误,valgrind
只是非常彻底。
它仍然肯定会释放与 s
关联的所有内存吗?
最佳答案
如果您使用 new[]
分配数组,则必须使用 delete[]
销毁它。一般来说,函数 operator delete(void*)
和 operator delete[](void*)
不能保证相同。
引用here
关于c++ - 是否有必要为 char 数组调用 delete[] 与 delete?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681084/