[Bug libstdc++/64632] runtime error: member call on address 0x0000004318a8 which does not point to an object of type 'ios_base'
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jan 19 18:15:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64632
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This just does the same std::ios_base::_M_streambuf_state member directly
rather than through the basic_ios<char>::rdstate() member function (compile
with -fno-access-control)
#include <fstream>
int main()
{
std::ofstream f;
std::ios_base& base = f;
return base._M_streambuf_state;
}
ub.cc:6:15: runtime error: member access within address 0x7fff3d4e47e8 which
does not point to an object of type 'ios_base'
0x7fff3d4e46f0: note: object is base class subobject at offset 248 within
object of type 'std::basic_ofstream<char, std::char_traits<char> >'
00 00 00 00 f8 c2 37 36 c2 7f 00 00 40 c1 37 36 c2 7f 00 00 00 00 00 00 00
00 00 00 00 00 00 00
^
I don't see how this can possibly go wrong ... it just accesses a member of a
base class. It makes no difference if you don't use the reference to base:
std::ofstream f;
return f._M_streambuf_state;
Or use a pointer instead of reference:
std::ofstream f;
std::ios_base* base = &f;
return base->_M_streambuf_state;
I don't think this is a libstdc++ issue.
More information about the Gcc-bugs
mailing list