Arrays 为什么不是';我的字符串没有被正确地传递给这个线程调用的函数吗?

Arrays 为什么不是';我的字符串没有被正确地传递给这个线程调用的函数吗?,arrays,string,multithreading,pthreads,cstring,Arrays,String,Multithreading,Pthreads,Cstring,我正在开发一个多线程应用程序,在这个应用程序中,客户端程序生成请求线程,向数据服务器程序发送字符串,数据服务器程序通过返回字符串进行响应。不幸的是,我无法将数据从客户端的主函数传递到每个请求线程调用的函数。大体上,我得到的请求线程是这样运行的(之前的一些变量声明没有显示): 现在,在主屏幕(“我复制了***…”)中,一切都很好。正确的值确实已复制到中。但是,当我到达线程调用的实际函数时,字符串丢失: void* deposit_requests(void* str_arg){

我正在开发一个多线程应用程序,在这个应用程序中,客户端程序生成请求线程,向数据服务器程序发送字符串,数据服务器程序通过返回字符串进行响应。不幸的是,我无法将数据从客户端的主函数传递到每个请求线程调用的函数。大体上,我得到的请求线程是这样运行的(之前的一些变量声明没有显示):

现在,在主屏幕(“我复制了***…”)中,一切都很好。正确的值确实已复制到中。但是,当我到达线程调用的实际函数时,字符串丢失:

    void* deposit_requests(void* str_arg){

      for(int i = 0; i < req_per_person; i++){
         thread_args* data = (thread_args*)str_arg;
         cout << "data->str is " << data->str << endl;  //empty string!!!
         ...       
      } 
   }
void*存款请求(void*str\u arg){
对于(int i=0;i您在pthread_create中传递的&dat是指向thread_args结构的指针的地址,而不是thread_args结构的地址

在不使用&to pthread\u create的情况下传递dat,然后存款请求的代码应该可以正常运行

pthread_create(&request_thread[j],NULL,&deposit_requests, dat);

其他人指出,但随后他们的post消失了,dat是另一个线程堆栈框架上的局部变量。当您使用&传递它时,您传递的是一个指向实体的指针,该实体将在调用pthread_create的函数结束时立即消失。然而,通过按原样传递dat,您传递的是指向堆分配的实体th的指针“其他人”可能意识到调用pthread_create的函数可能永远不会结束,在这种情况下实体不会消失。这种担心在一般情况下是有效的,但不是锁。
    void* deposit_requests(void* str_arg){

      for(int i = 0; i < req_per_person; i++){
         thread_args* data = (thread_args*)str_arg;
         cout << "data->str is " << data->str << endl;  //empty string!!!
         ...       
      } 
   }
pthread_create(&request_thread[j],NULL,&deposit_requests, dat);