如何删除c ++中的char指针

时间:2016-12-15 07:17:59

标签: c++

所以,如果我声明以下代码

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

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

delete[] c;

两种方式都有效,而且我也没有内存泄漏。

2 个答案:

答案 0 :(得分:5)

的第一种方式不起作用。它只是看起来像它的工作原理。

这被称为Undefined Behaviour:如果你做错了什么,C ++就不会抓住你的手。它允许编译器假设你没有犯某些错误,因为检查这些错误会减慢你的程序。

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

“看起来工作得很好”实际上是这些最差,因为你没有意识到你有一个bug。直到例如你移植到另一个平台,或获得一个新的编译器版本,或其他更改,然后然后你开始得到奇怪的结果,但当然,这段代码已经工作了多年,所以它不可能是你的代码错了......可以吗?

好的编译器会抱怨这些类型的错误,即使它们不是必需的,特别是如果你打开额外的警告。此外,静态分析工具可以帮助您捕获更多这些错误。 (只需搜索该术语;在此处提出建议将明确偏离主题。)

答案 1 :(得分:1)

两种方式都行不通。如果使用new []分配数组,则必须使用delete []删除它。期。否则,这是未定义的行为。

注意:如果第一种方式编译并运行,并不意味着它正在工作。这是未定义的行为。任何事情都可能发生。你的程序可能会崩溃。它可能不会。没有什么可以肯定地说。

相关问题