$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: [boost] invalid null pointer error in serialization with MSVC2008
From: h yh (johann1111_at_[hidden])
Date: 2010-03-15 22:46:58
Hi,
I am getting a very strange runtime error using boost serialization library
with MSVC2008.
I called the following template in my program.
template <class T>
void loadData(std::string fileName, T &t)
{
std::ifstream ifs(fileName.c_str());
boost::archive::text_iarchive ia(ifs);
t.clear();
ia >> t;
ifs.close();
}
it gets an assertion failed when running into boost::archive::text_iarchive
ia(ifs);
Debug Assertion failed: invalid null pointer
Here is the stack frame:
msvcr90d.dll!memcpy_s(void * dst=0x00000000, unsigned int
sizeInBytes=4294967295, const void * src=0x07953f63, unsigned int count=22)
Line 55 + 0x2f bytes
msvcp90d.dll!std::char_traits<char>::_Copy_s(char * _First1=0x00000000,
unsigned int _Size_in_bytes=4294967295, const char * _First2=0x07953f63,
unsigned int _Count=22) Line 582 + 0x16 bytes
msvcp90d.dll!std::_Traits_helper::copy_s<std::char_traits<char> >(char *
_First1=0x00000000, unsigned int _Size=4294967295, const char *
_First2=0x07953f63, unsigned int _Count=22, std::_Secure_char_traits_tag
__formal={...}) Line 714 + 0x15 bytes
msvcp90d.dll!std::_Traits_helper::copy_s<std::char_traits<char> >(char *
_First1=0x00000000, unsigned int _Size=4294967295, const char *
_First2=0x07953f63, unsigned int _Count=22) Line 706 + 0x22 bytes
msvcp90d.dll!std::basic_streambuf<char,std::char_traits<char>
>::_Xsgetn_s(char * _Ptr=0x00000000, unsigned int _Ptr_size=4294967295, int
_Count=22) Line 342 + 0x1a bytes
msvcp90d.dll!std::basic_streambuf<unsigned short,std::char_traits<unsigned
short> >::_Sgetn_s(unsigned short * _Ptr=0x00000000, unsigned int
_Ptr_size=4294967295, int _Count=22) Line 118
msvcp90d.dll!std::basic_istream<char,std::char_traits<char> >::_Read_s(char
* _Str=0x00000000, unsigned int _Str_size=4294967295, int _Count=22) Line
698 + 0x27 bytes
msvcp90d.dll!std::basic_istream<char,std::char_traits<char> >::read(char *
_Str=0x00000000, int _Count=22) Line 712
MyProject.exe!boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::load()
+ 0xad bytes
MyProject.exe!loadData<std::set<GamingNote,GamingNote,std::allocator<GamingNote>
> >(std::basic_string<char,std::char_traits<char>,std::allocator<char> >
fileName="nocturne.gnt",
std::set<GamingNote,GamingNote,std::allocator<GamingNote> > & t=[0]()) Line
14 + 0x14 bytes
It happens when the text_iarchive class constructs, so I am sure it's
nothing to do with the serialize function of T, but something between boost
and std::ifstream.
The wierd thing is I didn't come across this program at the first time. It
appears suddenly during development. If I separate the serialization code to
a single cpp file, it doesn't have any problem at all.
By the way, I am intergrating Qt and Ogre with boost by the way, but that
seems not to be quite helpful to identify this problem. Any ideas about
that?
Yuheng Huang