C++中使用posix线程的一些奇怪的东西

Ada*_*hns -1 c++ linux pthreads

我在C++中遇到了pthreads的奇怪错误,我尝试运行这段代码:

typedef struct
{
    struct sockaddr_in clienAddr;
    int clientLength;
    string message;
}param;

pthread_t clientThread;

param sentParam ;
sentParam.clienAddr = clientAddress;
sentParam.clientLength= client_info;
sentParam.message=buffString;

cout <<"sentParam: "<<sentParam.message<<endl;
// it prints well.

int i = pthread_create(&clientThread, NULL, handleClientRequestRead,&sentParam );
cout <<"i: "<<i<<endl;
the function which be called

void* handleClientRequestRead(void* params)
{
    // cout<<"params: "<< ;
    string msg = (( param *)(params))->message;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试打印msg时它是空的.任何帮助将不胜感激

Mat*_*lia 6

我的猜测是,当handleClientRequestRead被调用时sentParam已经超出范围并且其内存已被重用于其他目的.

您应该在您从线程访问它时仍然有效的位置为您的参数分配内存(例如,在堆上,请记住,当您不再需要它时必须释放它;有效的帮助可以shared_ptr).

顺便说一句,在C++中你不需要s 的typedef技巧struct.