Link to home
Start Free TrialLog in
Avatar of chsalvia
chsalvia

asked on

Segmentation Fault with ostream modifier

I haven't experimented much with C++ style iostream manipulators, so I'm not sure what the problem is here.  I have a data buffer type class which contains a raw byte array.  I want the output to be in hexidecimal format.

So I overloaded the ostream << operator like this:


inline std::ostream& operator << (std::ostream& strm, const data_buffer& db)
{
      byte* p = db.m_data.storage, *end = p + db.m_size;
      while (p < end)
            strm << std::hex << std::uppercase << static_cast<unsigned> (*p++) << " ";
}

This works, except if I use the endl modifier, the program crashes with a segmentation fault, i.e. doing

data_buffer db;
// fill db with some data
cout << db << endl;

...will make the program crash with a segfault.  Without the endl modifier, it works fine.  
ASKER CERTIFIED SOLUTION
Avatar of clockwatcher
clockwatcher

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of jkr
Can you be sure that data_buffer is NULL terminated?