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.
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
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Can you be sure that data_buffer is NULL terminated?