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

问题描述 投票:0回答:1

这是我的程序:

#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);
}

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

c++ fstream exit
1个回答
0
投票

根据这个

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

那么,您的

std::ofstream

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

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

© www.soinside.com 2019 - 2024. All rights reserved.