Ich verwende Protobuf als ein Datenformat für die Netzwerkkommunikation.Senden von Smart Pointer an Protobaf. Speicherproblem
In meinem Datenmodell hat WrapperMessage, Wrapper, der Untermeldung RegistrationRequest und InputChecking enthält.
Irgendwo in dem Programm erstelle ich eine Art von Nachricht (RegistrationRequest/InputChecking), dann übergeben es auf Funktionsvorlagen, um es in WrapperMessage dann serialisieren und senden.
Aber etwas stimmte nicht mit meinem Zeiger? malloc/new/whatever erkennt Heap-Korruption? Ich verstehe nicht, dass, warum er nicht mes.get nehmen will() und fällt während der Laufzeit ..
Fehler: Kritischer Fehler c0000374
alle Code meines Prüfprogramm festgestellt:
#include "ProtobufDataModels.pb.h"
#include <string>
#include <iostream>
#include <memory>
template <class T>
static void SendProto(T * message);
template <class T>
void SendProto(T * message)
{
WrapperMessage wm;
if (std::is_same<T, InputChecking>::value)
{
std::shared_ptr<InputChecking> mes(message);
std::string msg;
message->SerializeToString(&msg);
std::cout << msg << std::endl; // all ok
// set inputChecking mes. to wrapperMessage
wm.set_allocated_mes_inputchecking(mes.get()); // crash here
}
else if (std::is_same<T, RegistrationRequest>::value)
{
}
}
int main()
{
InputChecking * inputChecking = new InputChecking();
inputChecking->set_login("Jack");
SendProto(inputChecking);
std::cin.get();
return 0;
}