我在OSX10.9.2上使用Xcode5 5/clang。我的节目开始搞砸
std::ifstream file(path);
if (!file.is_open())
throw std::runtime_error("somethings wrong");几百(或千?)打开和关闭文件。当发生这种情况时,我不能再打开任何文件,无论是使用fstream还是使用fopen(),这使我认为我已经没有文件描述符了。根据ifstream上的文档,当fstream对象被销毁时,文件将被关闭。我所有的fstream对象都在堆栈上,我从不用new分配任何对象,所以如果我的堆栈被正确清理,我就不必调用fstream::close(),因为当对象超出作用域时,文件就关闭了。
但很明显,我还在某处泄露文件描述符。
问题: 1.即使按照计划清理了蒸汽对象,文件描述符也会用完吗?比如,文件描述符在关闭后是否可以被重用,或者一旦被使用和关闭,它们会永远消失吗? 2.有什么方法可以泄漏fstream对象,让它们打开,即使它们都存在于我的堆栈中?
发布于 2014-04-09 18:15:07
不过,我发现了我的问题。
我根本没有泄漏fstream对象,但是我一直在疯狂地泄漏sqlite句柄。我发现它是通过仔细使用
lsof -p my_processes_pid | wclsof是一个非常有用的命令!
https://stackoverflow.com/questions/22970334
复制相似问题