2

我正在开发一个多客户端聊天项目。

这是我的代码:

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++)有什么问题?我已经看过一些这样的示例项目:链接>>>

4

2 回答 2

3

您正在传递一个指向 a 的指针,RecvDataModel它是一个函数局部变量。Client::Recv它将在函数结束时超出范围。

尝试使用以下方式分配它new

RecvDataModel * outData = new RecvDataModel();
outData->sockAddr = sockAddr;
outData->inData = inData;
pthread_t rThr;
pthread_create(&rThr, NULL, ProcessData, outData);
于 2013-01-27T17:17:12.247 回答
2

不要传递指向超​​出范围的局部变量的指针。一旦你创建了那个线程,outData它就不再有效了,所以你给它的指针是没有用的。您需要outData使用限定符进行声明,或者为它动态分配空间,以便它在返回static时不会消失。Client::Recv

于 2013-01-27T17:16:51.983 回答