c++ - Unhandled exception at 0x50E2DF58 (msvcp120d.dll) -


i'm trying read binary file structs. error thrown when program exits. breakpointed , error comes after return 0 executed.

when run program displays results. not crash until after system("pause")

this actual error: unhandled exception @ 0x50e2df58 (msvcp120d.dll) in struct reader.exe: 0xc0000005: access violation reading location 0x007ab1ec.

#include <iostream> #include <string> #include <fstream> using namespace std;  struct user{     string name; };  int main(){     fstream file("file.dat", ios::in | ios::binary);     user users[5];      (size_t = 0; !file.eof(); i++)     {         file.read(reinterpret_cast<char *>(&users[i]), sizeof(user));     }      file.close();     size_t size = (sizeof(users) / sizeof(user));      (size_t = 0; < size; i++)     {         cout << users[i].name << endl;     }      system("pause");     return 0; } 

when return function, destructor each element of users array executed.

the users array contains 5 user objects, each of contain std::string.

std::string objects abstract heap allocated memory, use buffer contain each character of string contain.

when perform binary write onto each element of users array, you're setting internal pointer(s) of std::string instances garbage. when destructors called try read through garbage pointer, and/or free garbage pointer.

at rate, it's bad business.

to fix problem, need implement mechanism serializing/deserializing strings, copying raw bytes of objects isn't going cut it.


Comments

Popular posts from this blog

PHPMotion implementation - URL based videos (Hosted on separate location) -

javascript - Using Windows Media Player as video fallback for video tag -

c# - Unity IoC Lifetime per HttpRequest for UserStore -