John Kalane John Kalane - 1 year ago 78
C++ Question

What can go wrong if cout.rdbuf() is used to switch buffer and never set it back?

The author presented this code under the title

A bus error on my platform

#include <fstream>
#include <iostream>

int main()
std::ofstream log("oops.log");
std::cout << "Oops!\n";
return 0;

The string "Oops!\n" is printed to the file "oops.log". The code doesn't restore cout's streambuf, but VS2010 didn't report a runtime error.

Answer Source

Since log and std::cout share a buffer, that buffer will probably be freed twice (once when log goes out of scope, then once more when the program terminates).

This results in undefined behavior, so it's hard to tell the exact reason why it triggers a bus error on his machine but silently fails on yours.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download