我有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 –