0

構造体から関数 topTwo に変換された void ポインターを渡しています。キャストバックして構造体からデータを取得しようとすると、代わりにアドレスが取得されます。私は何を間違っていますか?localStruct->numberこの関数では、1 を返そうとしていますが、代わりにアドレスを返しています。

 void  *topTwo(void *p)
 {
  struct Variables * localStruct;
  localStruct= (struct Variables *) p;
  cout<<localStruct->number<<endl;
  int  z = long(localStruct->number);
  cout<<z<<endl;
}

ここに構造体があります

struct Variables{
 int largestNum;
 int secondLargestNum;
 int number;
};

データを渡すメイン関数は次のとおりです。

int main() 
{
    Variables *vars;
    vars= new struct Variables();
    vars->largestNum=0;
    vars->secondLargestNum=0;
    vars->number=0;
    pthread_t  tid[5];
    for(int  i=0; i<5; i++)
    {                                   
       vars->number=i;
       cout<<vars->number<<endl;                                               
       void * sVoid;
       sVoid = (void *) &vars;
       pthread_create(&tid[i], NULL, topTwo,(void *) sVoid);
       pthread_join(tid[i], NULL);
    }
 }
4

1 に答える 1

3

変化する:

sVoid = (void *) &vars;  // this is a `struct Variables**`

に:

sVoid = (void *) vars;
于 2012-04-25T00:59:05.743 に答える