作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以如果我声明下面的代码
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/
我是一名优秀的程序员,十分优秀!