2011-06-20 8 views
1

私はLinux環境でCでアプリケーションを開発しています。デタッチされたpthread_create()はメモリをリークします

do { 
    pthread_t    flushThread; 
    pthread_attr_t   attr; 
    logevent_thread_t  logThread = { Db , &do_curl }; 

    if ((pthread_attr_init (&attr) == 0) && 
     (pthread_attr_setdetachstate (&attr , PTHREAD_CREATE_DETACHED) == 0) ) { 
     pthread_create (&flushThread , &attr , (void*)FlushThread , (void*)&logThread); 
     pthread_attr_destroy (&attr); 
    } 
} while(1); 

私はコードで、Iのみ使用のpthread_create()を始めたが、私は漏れに気づいたとき、私はgoogle'd開始しました:私は、次のコードは、唯一の数百の実行後にメモリのトンをリークしていることに気づきました私はATTを初期化するなぜ

だ:と、以下のURLをStackOverflowのを検索し、見つかりましたリブートを開始し、スレッド「分離」を開始します。私も属性を破壊する。 ブロッキング呼び出しをしたくないので、pthread_join()を使用することはできません。自分のスレッドを自分自身で生きたいです。

残念ながら、漏れはまだあります。私はもうアイデアを持っておらず、それ以上の助言を得るでしょう!

ありがとうございました!


@arrowdodger:任意の種類の属性を設定しないでpthread_detach()を呼び出すと、リークも発生します。 私もsetdetachとpthread_detach()を使って成功しなかった。

@drhirsch:私が1日実行したときに「Out Of Memory」カーネルパニックが発生するため、リークしていることが分かりました。 Additionnaly、topを使って私のプロセスに専用のメモ帳がますます増えています(しかし、これはvalgrindを使うのが最善の方法です)。

+0

このコードがメモリをリークすることをどのように知っていますか? – hirschhornsalz

答えて

0

あなたのリンクから読んだのは、pthread_detach()を呼び出す必要があり、DETACHED属性で作成しないことです。

関連する問題