gpt4 book ai didi

c++ - 尝试将 std::cerr 重定向到文件时出现访问冲突异常

转载 作者:行者123 更新时间:2023-11-30 01:06:49 28 4
gpt4 key购买 nike

我想将 std::cerrstd::cout 的输出重定向到文件。为此,我在下面的代码示例中使用了 rdbuf 函数。不幸的是,我收到了异常

Exception thrown: read access violation.

*(__imp_std::basic_ios<char,std::char_traits<char> >::rdbuf(...)) was 0xCCCCCCCC.

每当我尝试向 std::coutstd::cerr 写入任何内容时。

这是产生我的问题的代码示例:

void redirect()
{
auto t = std::time(nullptr);
auto tm = *std::localtime(&t);

std::ostringstream oss;
oss << std::put_time(&tm, "%Y-%m-%d_%H-%M-%S.log");
auto cerrFileName = "cerr-" + oss.str();
auto coutFileName = "cout-" + oss.str();


std::ofstream cerrFile(cerrFileName, std::ios::ate); // file is created
std::cerr.rdbuf(cerrFile.rdbuf());

std::ofstream coutFile(coutFileName, std::ios::ate); // file is created
std::cout.rdbuf(coutFile.rdbuf());
}

int main()
{
redirect();

std::cout << "Test"; // The exception is thrown here.

return 0;
}

此示例按原样创建了两个文件,但并未向其中任何一个写入任何内容。我究竟做错了什么?

最佳答案

std::ofstream 拥有自己的缓冲区,当 std::ofstream 对象超出范围时,它们会破坏缓冲区,从而导致 std::coutstd::cerr 使用指向缓冲区的无效指针。

确保缓冲区不会被过早删除。

关于c++ - 尝试将 std::cerr 重定向到文件时出现访问冲突异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45563990/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com