gpt4 book ai didi

c++ - 程序终止,动态内存位于堆上

转载 作者:行者123 更新时间:2023-11-30 18:26:51 24 4
gpt4 key购买 nike

我将把这个问题作为c/c++ 的序言,因为它主要与此相关,而且我已经看到它对c/c++ 的影响最大。

这让我担心了一段时间,我知道其中一些问题是可以避免的(我想避免关于如何避免的讲座,而是关注后果,以防万一它确实发生),但是我仍然有一个根本问题。

初步想法:

指针只是充当内存中其他位置的对象的地址(这可能是因为需要修改该类型 int[] 的数量,或者因为该类型的本质事物在其整个生命周期中都可能发生变化多态性)

每当使用关键字new时,它都应该有一个相应的关键字delete(如果不是多个,取决于异常处理和多个退出点)

当通过关键字delete对动态分配的内存块进行操作时,调用析构函数(并且执行其操作(如果有)),该内存块将返回到系统存储以供使用其他事情,并且(取决于编译器、宏或程序员)将指针设置为 NULL 以避免非法内存访问。

情况:

当我编写一个使用动态内存的程序时(指针newdelete的组合)。如果发生某些事情,程序意外终止(未处理的异常、内存访问错误、非法操作等)。系统应该尝试删除程序正在使用的所有内存,并将其返回给系统,但指针并不总是被清除。这可能因操作系统和编译器(关于程序终止的执行方式)而异,但所指向的内容可能仍然存在于内存中,因为删除的只是指针,而不是所指向的内容。当然,这可能是相当小的损失(对于小程序来说小于 MB,但对于数据存储的压力测试或处理大文件来说,即使在 GB 范围内,这也可能相当大。

直接的问题是可以采取什么步骤来恢复内存?我发现唯一有效的就是重新启动系统(这是在 Windows 系统上使用 g++ 和 VS2008/2010 时的情况)

最佳答案

如果程序终止,则它使用的所有内存都将返回给系统。至少在你说你正在使用的Windows下是这样。如果您认为这没有发生,那么也许您的程序实际上根本没有终止。

关于c++ - 程序终止,动态内存位于堆上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10345470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com