2012-04-24 18 views
0

でコンパイルするとき、私はこれをコンパイルしようとすると、私はエラーを取得する:のpthread_create - エラーC

warning: passing argument 1 of pthread_create makes pointer from integer without a cast.

してください誰も私を助けることができるかどうか...

int Traveler(int id, int numBags) 
    { 
      int i; 
      int err; 
     err = pthread_create(id, NULL, Traveler, NULL); 
     if(err!=0) 
     { 
         return -1; 
     } 
     else 
     { 

     } 
    } 

答えて

4

誤差がかなり明確です。最初の引数は整数ではなくポインタでなければなりません。

男のpthread:

int pthread_create(pthread_t *restrict thread, 
      const pthread_attr_t *restrict attr, 
      void *(*start_routine)(void*), void *restrict arg); 

    The pthread_create() function shall create a new thread, with 
    attributes specified by attr, within a process. If attr is NULL, the 
    default attributes shall be used. If the attributes specified by attr 
    are modified later, the thread's attributes shall not be affected. Upon 
    successful completion, pthread_create() shall store the ID of the cre- 
    ated thread in the location referenced by thread. 

あなたのpthread_create呼び出しでidの前にアンパサンドを貼り付ける前に、その最後の文を再読み込み。 EDIT2:また、idをpthread_tとして定義する必要があります。

EDIT:

は実際に、同じライン上に2つの他の問題があります。start_routineは、2つのではなく、一つの引数を取る関数である必要がありますが、あなたが渡しているので、このすべての最悪はfork bombだろうあなたが呼んでいる同じ機能!

+1

+1ですが、 'id'の前に'& 'を付けるのは正しいことではありません。最初の引数は' int'へのポインタではなく、 'pthread_t'へのポインタでなければなりません。コンパイラはそれを受け入れるかもしれません( 'pthread_t'が' int'のtypedefである場合)。一般的ではありません。 –

+0

良いキャッチ。私の答えを更新しました。まあ、私は1行で4つのエラーを起こすと思います... :-) – smocking

関連する問題