繁体   English   中英

使用exit(1),c ++时释放内存

[英]deallocating memory when using exit(1), c++

我正在完成一项学校作业,我们被告知每当我们输入错误时,我们应该打印一条消息并退出程序。 显然我使用exit(1),但问题是我在使用这个函数时有内存泄漏。 我不明白为什么 - 我使用的每个变量都在堆栈而不是堆上。

我该怎么做才能防止那些内存泄漏? 谢谢!

使用exit函数时,程序将终止并释放它分配的所有内存。 没有内存泄漏。

编辑:从你的评论中,我可以理解你担心你的对象在终止之前没有被销毁(即他们的析构函数没有被调用)。 然而,这不构成存储器泄漏,因为存储器由该过程释放并且可供系统使用。 如果您指望对象析构函数执行对您的工作流程重要的操作,我建议返回错误代码而不是使用exit并将该错误代码传播到main()。

EDIT2:

根据标准,在销毁具有静态存储持续时间的对象期间调用exit()会导致未定义的行为。 你在做吗?

exit 不会调用任何基于堆栈的对象的析构函数,所以如果这些对象在内部分配了任何内存,那么肯定会泄漏内存。

在实践中,它可能无关紧要,因为任何可能的操作系统都会回收内存。 但是,如果析构函数应该做任何其他事情你就会遇到问题。

出于这个原因,exit与c ++并没有很好地混合。 你最好只允许你的程序从main返回到exit,或者你需要退出内部函数而不是抛出异常,这将导致调用堆栈被解除,因此调用析构函数。

解决方案是根本不使用exit() 您使用RAII编写程序(使用类进行资源管理)并在出现问题时抛出异常。 然后,由于调用析构函数,所有内存都被回收。

你没有真正的内存泄漏。 当程序终止时,OS释放程序使用的所有内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM