如何在C 中删除炭指针

How to delete a char pointer in c++

本文关键字:删除 指针      更新时间:2023-10-16

因此,如果我声明以下代码

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

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

delete[] c;

两种方式工作,我都没有内存泄漏。

第一种方法不工作。它只是看起来像它有效。

这被称为不确定的行为:如果您做错了什么,C 不会握住您的手。它允许编译器假设您没有犯某些错误,因为检查这些错误会减慢您的程序。

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

  • 崩溃
  • 给出奇怪的结果
  • 崩溃或仅给出奇怪的结果
  • 似乎可以完美工作
  • 让恶魔从鼻子飞出

"看起来完美工作"实际上是其中的最差,因为您没有意识到自己有一个错误。例如,直到您移植到另一个平台,或者获取新的编译器发布或其他内容更改,然后然后,您开始获得奇怪的结果,但是,当然,此代码已经有效了多年,因此,不可能是您的代码是错误的...可以吗?

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

两种方式都无法正常工作。如果使用new []分配数组,则必须使用delete []删除它。时期。否则,这是不确定的行为。

注意:如果第一种方式编译并运行,则并不意味着它正在工作。这是不确定的行为。一切都会发生。您的程序可能会崩溃。可能不是。没有什么可以明确地说的。