Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我们有一个程序,我们在其中分配了一些内存,然后在几行之后有一个断言语句。如果assert语句抛出错误,分配的内存会发生什么?在停止程序之前它会免费吗?
assert失败时,将错误写入stderr并调用abort()。与exit()不同,它不执行用atexit()注册的函数,也不调用析构函数。
assert
因此,您的析构函数、清理代码等都不能被调用。所以这取决于操作系统,因为程序在“意外”终止之前没有释放内存。
这可能是设计使然,因为调用析构函数可能会导致一些进一步的错误。它在那个失败的断言处终止,不再执行任何代码。
当assert失败导致您的程序停止运行时,内存保持分配状态。
作为破坏进程的一部分,任何现代桌面操作系统都会回收内存。一些嵌入式操作系统可能无法做到这一点,尽管我手头没有一个名字。
您可以使用 Valgrind 等实用程序以这种方式检测操作系统必须回收的内存。