如何在C 中删除炭指针
How to delete a char pointer in c++
因此,如果我声明以下代码
int main() {
char* c = new char[20];
delete c;
return 0;
}
为什么我没有内存泄漏?不是删除的正确方法
delete[] c;
两种方式工作,我都没有内存泄漏。
第一种方法不工作。它只是看起来像它有效。
这被称为不确定的行为:如果您做错了什么,C 不会握住您的手。它允许编译器假设您没有犯某些错误,因为检查这些错误会减慢您的程序。
如果您编写未定义的行为,则您的程序可以做。包括:
- 崩溃
- 给出奇怪的结果
- 崩溃或仅给出奇怪的结果
- 似乎可以完美工作
- 让恶魔从鼻子飞出
"看起来完美工作"实际上是其中的最差,因为您没有意识到自己有一个错误。例如,直到您移植到另一个平台,或者获取新的编译器发布或其他内容更改,然后然后,您开始获得奇怪的结果,但是,当然,此代码已经有效了多年,因此,不可能是您的代码是错误的...可以吗?
好的编译器无论如何都会抱怨其中一些类型的错误,即使不是必需的错误,尤其是当您打开额外警告时。另外,静态分析工具可以帮助您捕获更多这些错误。(只需搜索该术语;提出建议将在此处明确偏离主题)。
两种方式都无法正常工作。如果使用new []分配数组,则必须使用delete []删除它。时期。否则,这是不确定的行为。
注意:如果第一种方式编译并运行,则并不意味着它正在工作。这是不确定的行为。一切都会发生。您的程序可能会崩溃。可能不是。没有什么可以明确地说的。
相关文章:
- 无法删除指针,已触发断点
- 删除指针数组 (C++) 中的元素
- 如果我删除指针,我的C++程序会意外删除系统文件吗?
- 为什么const_cast删除指针的恒常性,而不删除指向常量的指针的恒常性?
- 删除指针后内存泄漏
- 这是系统资源吗?(或者我怎么知道我是否需要删除指针) - 在 C++ 中使用 C
- C++ 从 2 组指针中删除指针
- 当删除 [] 指针工作时,为什么无法获得指向的数组大小?
- 在这种情况下,删除指针数组期间会发生什么?
- 在C++中删除指针数组时析构函数崩溃
- 何时/如何在使用指针后正确删除指针?
- 在C++库中,谁应该删除指针、用户或库?
- 删除指针后阻止对象使用 "this"
- 删除指针后C++尝试/捕获
- 删除指针内存分配以避免内存泄漏
- 删除指针时,未分配被释放的 C++ 指针错误
- 如何从抽象类中删除指针
- 我应该在 v8::外部手动删除指针吗?
- 删除指针
- C 如何删除指针的默认对象成员