zeromq与protobuf的分段故障在解析在C + +(zeromq with protobuf

2019-10-20 08:33发布

我使用zeromq与protobuf的发送/收到消息,但代码被拍击与接收机端Segmentation fault (core dumped)错误在解析接收到的数据。

Scan是我的消息。

sender.cpp

Scan proto_ls_msg;
proto_ls_msg.set_angle_min(0.0);
proto_ls_msg.set_angle_max(180.5);
std::string ls_msg_str;
proto_ls_msg.SerializeToString(&ls_msg_str);
zmq::message_t request (ls_msg_str.size());
memcpy (request.data(), ls_msg_str.c_str(),ls_msg_str.size());
socket.send (request);

collector.cpp

zmq::message_t recieved;
socket.recv (&recieved);
//thanks to πάντα ῥεῖ
std::string ls_msg_str((char*)recieved.data(),recieved.size()); 
Scan *pb_laser_msg_rcv;
pb_laser_msg_rcv->ParseFromString(ls_msg_str); // <--  Segmentation fault here

我尝试转换不同的方式zmq::message_tstd::string ,但它仍然提供了分段故障。

编辑更新:

//std::string ls_msg_str((char*)recieved); 
  std::string ls_msg_str((char*)recieved.data(),recieved.size());

谢谢。

Answer 1:

IIRC,你不能直接投出zmq::message_t为字符串。 你或许应该只使用data成员创建的字符串。 另外, recieved.data不是'\0'终止,所以你还需要当你构建传递大小ls_msg_str实例:

std::string ls_msg_str((char*)recieved.data,recieved.size);
                                    // ^^^^          ^^^^


文章来源: zeromq with protobuf segmentation fault while parsing in c++