C++ exit(1) 导致 IO 丢失?

-1 c++ fstream exit

这是我的程序:

#include <fstream>

int main() {
    std::ofstream fout("data.dat", std::ios::binary);
    for (int isam=0; isam<500; isam++) fout.write((char*) &isam, 4);
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

当我在 MacBook 上运行此程序时,文件 data.dat 的长度为 1 字节(在 AWS 上为 0 字节),而不是 2000。如果我增加 500,我最终会得到更多字节,但永远不会达到预期的数量。但是,当我注释掉 exit() 时,无论字节数如何,一切都会按预期工作。这就好像 exit() 停止了前一行代码的缓冲输出。这不是一个bug吗?谢谢

Eti*_*tel 7

根据这个

堆栈未展开:不调用具有自动存储持续时间的变量的析构函数。

那么,您std::ofstream永远不会被破坏,这意味着它的缓冲区没有关闭,因此它仍然包含的任何内容(并且尚未刷新到磁盘)都会丢失。

所以,不,这不是一个错误。它完全按照设计工作。

  • 这是OP程序中的一个错误 - 基于一个错误的假设,即在执行“exit()”时自动存储持续时间的对象将被销毁和/或流将被刷新和关闭。 (2认同)