c++ - 如何在C++中删除一个char指针

标签 c++

所以如果我声明下面的代码

int main() {
   char* c = new char[20];
   delete c;
   return 0;
}

为什么我没有内存泄漏?是不是删除的正确方法

delete[] c;

这两种方法都有效,而且我都没有发生内存泄漏。

最佳答案

第一种方式有效。它只是看起来有效。

这被称为 Undefined Behaviour : 如果你做错了什么,C++ 不会牵着你的手。它允许编译器假定您不会犯某些类型的错误,因为检查这些错误会减慢您的程序。

如果您编写未定义行为,您的程序可以做任何事情。包括:

“看似完美地工作”实际上是最糟糕的,因为您没有意识到自己有错误。直到你移植到一个不同的平台,或者获得一个新的编译器版本,或者其他的改变,然后你开始得到奇怪的结果,但是当然,这段代码已经工作了很多年,所以不可能是您的代码出错了……可以吗?

好的编译器无论如何都会提示其中一些类型的错误,即使它们不是必需的,尤其是当您打开额外警告时。此外,静态分析 工具可以帮助您捕获更多此类错误。 (只需搜索该术语;在这里提出建议显然是题外话)。

关于c++ - 如何在C++中删除一个char指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41158487/

相关文章:

c++ - main 之前 C++ 程序中的奇怪段错误

c++ - (C++) 如何将 STL 列表声明为外部列表?

c++ - malloc 是如何理解对齐的?

c++ - 如何在 C++ 中获取 Wmi 连接的 SeSecurityPrivilege

c++ - 运算符重载类型转换 : Polar to cartesian c++

c++ - 为什么 char{} 和 char() 用作 char* 参数的临时变量?

c++ - 如何在不使用(if/else)运算符的情况下将新值写入单个位

c++ - 非捕获 lambda 生命周期

c++ - qt qml 对象已经有一个 QQmlContext

c++ - 如何抑制 C++ 中的个别警告?