2012-04-25 4 views
0

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

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); 
    } 
} 

答えて

3

変更:

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

へ:

sVoid = (void *) vars; 
+0

おかげで、何らかの理由で、私はオフに行っていた例は、の&がそれ – Aaron

+0

でキャストが本当に必要ありません持っています。 –

関連する問題