c++ - 是否有必要为 char 数组调用 delete[] 与 delete?

标签 c++

我正在使用一个同事编写的库,发现 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/

相关文章:

c++ - 比较器 - 重载运算符 <

c++ - 初始空的 unordered_map 使用多少内存?

c++ - 为什么 C++ 允许使用这种方法修改私有(private)成员?

c++ - D3D10 常量缓冲区不工作

c++ - 使用 FFTW_MEASURE 时 FFT 输出为空白,但使用 FFTW_ESTIMATE 时可以正常工作

c++ - 定义 lambda 的一般准则

c++ - Qt::nativeEvent 调用

python - 在 python docker 镜像上安装 simstring (SWIG)

c++ - 前向声明和友元函数

c++ - 如何在 C++ 中链接 .a 文件