我想在文件中写一些日志。
这是我的代码:
FILE *writefile = fopen((Dir + FileName).data(), "at");
if (writefile)
{
fprintf(writefile, log.data());
fclose(writefile);
}
当我尝试写作时,它肯定可以正常工作。
此代码在联网系统中执行,但在无连接状态下执行。
因此,它会保持每秒写入日志“ Try Connct”。
This is the image what I want to write
我可以在控制台上看到这些日志。
在图像中,我尝试在11:10:00之前写日志。
但是在File中,直到11:06:00才写入。
我尝试调试我的代码,
This is the image in debugging
为什么会这样?
---添加---
我尝试打印错误。所以,我用了恐怖。
我收到错误消息:打开的文件太多。
但是为什么呢?显然,我已关闭文件,如您在我的代码中所见。
答案 0 :(得分:0)
您的程序中存在资源泄漏。 open
/ dup
/ fopen
/ stream::open
/ pipe
/ connect
/ accept
/ {{1} }没有匹配的socket
/ close
/ fclose
/ ~stream
的呼叫。
在发生stream::close
泄漏的情况下,您可以通过以下方式之一避免泄漏:
FILE
代替ofstream
。超出范围时,它将自动关闭文件。不幸的是,没有找到此泄漏的简便方法。最好的方法是从一开始就避免使用它,方法是将FILE
,std::stream
和RAII与std::unique_ptr
一起使用。由于代码不遵循此规则,因此唯一的出路是通过代码搜索fopen
(及其他),并使其可能使用unique_ptr
来使用RAII。