断言用C++释放内存

BRa*_*t27 3 c c++ assert memory-management

假设我们有一个程序,我们分配一些内存,然后我们有一些断言声明.如果assert语句抛出错误,分配的内存会发生什么?在停止程序之前它是免费的吗?

Ani*_*han 8

assert失败时,将错误写入stderr并调用abort().与exit()不同的是,它不执行用atexit()注册的函数,也不调用析构函数.

因此,您的析构函数,清理代码等都不能被调用.所以由操作系统来决定,因为在" 意外 "终止之前,程序没有释放内存.


这可能是设计的,因为调用析构函数可能会导致一些进一步的错误.它终止于失败的断言,不再执行代码.