What I'm trying to do is, make the class message serialize and deserialize it's self. Not into or from a file, but into or from a binary sequence as a string or cstring.
Message.h:
class Message
{
private:
int message_id;
int sender_id;
std::string sender_data;
Message ();
public:
Message (int id, std::string data);
virtual ~Message ();
virtual const char* Serialize ();
virtual void Deserialize (const char* buf);
virtual void Print ();
};
Message.cpp:
const char* Message::Serialize ()
{
char buf[1024];
// This will work somehow. I get the object and then glibc
// detects double free or corruption, because i write into buf
// and not into a file.
// std::ofstream out_stream(buf, std::ios::binary);
// out_stream.write((char *)this, sizeof(*this));
// out_stream.close();
// Why this won't work? I didn't get it.
std::stringstream out_stream(buf, std::ios::binary);
out_stream.write((char *)this, sizeof(*this));
std::string str(buf);
std::cout << str << std::endl
<< buf << std::endl;
return str.c_str();
}
void Message::Deserialize (const char* buf)
{
std::ifstream in_stream(buf, std::ios::binary);
in_stream.read((char*)this, sizeof(*this));
in_stream.close();
}
Main:
#include "Message.h"
int main (int argc, int argv[])
{
Message msg1(12345, "some data");
Message msg2(12346, "some other data");
msg1.Print();
msg2.Print();
msg2.Deserialize(msg1.Serialize());
msg1.Print();
msg2.Print();
return 0;
}
Output:
Msg: 0 Client: 12345 Data: some data
Msg: 1 Client: 12346 Data: some other data
Msg: 0 Client: 12345 Data: some data
Msg: 1 Client: 12346 Data: some other data
Any suggestions? Greetings Mesha