invalid null pointer error in serialization with MSVC2008

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
participants (1)
-
h yh