yot*_*moo 3 c++ memory-leaks exit
我正在完成一项学校作业,我们被告知每当我们输入错误时,我们应该打印一条消息并退出程序.显然我使用exit(1),但问题是我在使用这个函数时有内存泄漏.我不明白为什么 - 我使用的每个变量都在堆栈而不是堆上.
我该怎么做才能防止那些内存泄漏?谢谢!
使用该exit功能时,程序将终止并释放由其分配的所有内存.没有内存泄漏.
编辑:从你的评论中,我可以理解你担心你的对象在终止之前没有被销毁(即他们的析构函数没有被调用).然而,这不构成存储器泄漏,因为存储器由该过程释放并且可供系统使用.如果您指望对象析构函数执行对您的工作流程重要的操作,我建议返回错误代码,而不是使用exit并将该错误代码传播到main().
EDIT2:
根据标准,在销毁具有静态存储持续时间的对象期间调用exit()会导致未定义的行为.你在做吗?
exit 不会调用任何基于堆栈的对象的析构函数,所以如果这些对象在内部分配了任何内存,那么肯定会泄漏内存.
在实践中,它可能无关紧要,因为任何可能的操作系统都会回收内存.但是,如果析构函数应该做任何其他事情你就会遇到问题.
出于这个原因,exit与c ++并没有很好地混合.你最好只允许你的程序从main返回到exit,或者你需要退出内部函数而不是抛出异常,这将导致调用堆栈被解除,因此调用析构函数.