私は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を使うのが最善の方法です)。
このコードがメモリをリークすることをどのように知っていますか? – hirschhornsalz