我有2个不同的应用程序,一个发件人和一个接收程序。发件人将发送一条消息给接收者,接收者将解码消息并打印到控制台。但是,我不断收到分段错误错误。C++分段错误 - 两个应用程序之间的消息
发送者和接收者的应用程序具有相同的TestContainer.h和TestContainer.cpp。
铸造方法
template<class To,class From>To cast(From v)
{
return static_cast<To>(static_cast<const void*>)(v);
}
Sender应用程序
int main()
{
TestContainer tc;
tc.setDesc("this is a message");
const char* castedData = cast<const char*>(&tc);
const TestContainer test_tc = cast<const TestContainer*>(castedData);
// i get back "this is a message",so the casting is working
cout << "message content: " << test_tc->getDesc() <<endl;
TaoSender;
TaoSender.send(castedData);
return 1;
}
接收机中的应用
void push(const RtecEventComm::EventSet& events)
{
const char* receivedData;
events[0].data.any_value >>= receivedData;
cout << "data received: " << receivedData << endl;
const TestContainer rcv_tc = cast<const TestContainer*>(receivedData);
cout << "message content: " << rcv_tc->getDesc() <<endl; // error(segmentation fault)
}
TestContainer.h和TestContainer.cpp
class TestContainer{
public
TestContainer();
virtual ~TestContainer();
const std:string& getDesc() const {
return desc;
}
void setDesc(const std::string& desc) {
this->desc = desc;
}
private
std::string desc;
}
#include TestContainer.h
TestContainer::TestContainer(){}
TestContainer::~TestContainer(){}
castedData在发送方的值和receivedData在接收方的值是一样的,所以我猜消息发送是正确的。
但是,在接收器,在将receivedData缓冲区转换为Testcontainer指针并尝试访问desc后,出现分段错误错误。
我也尝试在发件人的铸造回Testcontainer,我能够访问desc。那么我错过了什么?
你不应该强制转换数据,你需要将一个char *转换为一个类,这就是问题。 –
这段代码有一些基本的语法错误,例如'return static_cast(static_cast >“和错位的圆括号。请在自包含的示例中发布实际代码([MCVE])。 –
davmac
这看起来并不像一个CORBA程序,检查TAO –