我正在开展一个多客户聊天项目。
这是我的代码:
struct RecvDataModel
{
int sockAddr;
char *inData;
};
void *ProcessData(void *arg);
void Client::Recv(int sockAddr, char *inData)
{
RecvDataModel outData;
outData.sockAddr = sockAddr;
outData.inData = inData;
pthread_t rThr;
pthread_create(&rThr, NULL, ProcessData, (void*)&outData);
}
void *ProcessData(void *arg)
{
RecvDataModel *inData = (RecvDataModel*)arg;
cout << inData->inData << endl;
return 0;
}
基本上,如果sockAddr(在Client :: Recv中)等于“55”ProcessData的cout函数写入“31784736”,如果等于“0”cout的“5120”
这是我的大问题!没有这个我不能继续! (我正在使用eclipse C ++) 有什么问题?我已经看过一些这样的示例项目:Link >>>
答案 0 :(得分:3)
您正在将指针传递给RecvDataModel
,这是一个函数局部变量。它将超出Client::Recv
函数末尾的范围。
尝试使用new
分配:
RecvDataModel * outData = new RecvDataModel();
outData->sockAddr = sockAddr;
outData->inData = inData;
pthread_t rThr;
pthread_create(&rThr, NULL, ProcessData, outData);
答案 1 :(得分:2)
不要将指针传递给超出范围的局部变量。一旦你创建了那个线程,outData
就不再有效,所以你给它的指针是不好的。您需要使用outData
限定符声明static
,或者为其动态分配空间,以便在Client::Recv
返回时不会消失。