Jer*_*ang 2 c++ memory-management new-operator
当我用来new []申请内存时。最后,我用来delete释放内存(不是delete[])。这会导致内存泄漏吗?
两种类型:
int, char, double...我认为可能会免费泄漏。因为有析构函数。
很多人和一些书告诉我,new[]-> delete[]; new-> delete。
我想知道为什么。所以我查了vs2010源码,肯定是使用了内存池机制。它又长又复杂。我无法继续阅读。
如何delete实施delete[]?
这不是内存泄漏;而是内存泄漏。这是未定义的行为。那就更糟糕了。
调用deleteby 分配的内存new[]可能会导致堆损坏,从而导致应用程序崩溃。当然,不是立即,因为那太有用了。它会在稍后的某个时间崩溃,在堆被损坏很久之后,几乎无法追踪。
始终delete[]与 一起使用new[]。事实上,从一开始就没有使用过。new[]std::vector除非您有非常特殊和特定的需求,否则请使用 a 。
我想知道为什么?
为什么这有关系?这是错误的并会导致程序损坏。这是错误的,因为 C++ 标准是这么说的。
不过,如果你坚持要理由的话……
请注意,您可以使用 分配任意数量的项目new[]。您可以在那里放置任何计数(又名:正整数)。所以你可以有new int[50]或new int[someIntegerVariable]。都很好。
另请注意,这不需要delete[]计数。呃……这怎么可能?如果你分配 50秒,显然需要知道你分配了多少,对吗?但你不必告诉它;它自动知道。intdelete
如何?因为new int[50]分配的不仅仅是一个 50 的数组int。它还分配足够的空间来容纳分配的大小。可以将其视为分配 51int个,但只让您使用其中的 50 个。
然后,delete[]就来了。它找出在哪里可以找到分配的计数new[]。它使用该计数来释放内存。
delete不这样做。因此,它无法正确地释放内存。