私のプログラムはスタックスマッシングが検出されて失敗し、Valgringからのメッセージは、「ブロックが損失レコードで失われる可能性があります」というメッセージが3回繰り返され、解決方法がわかりません。
==3726== 144 bytes in 1 blocks are possibly lost in loss record 74 of 87
==3726== at 0x4025315: calloc (vg_replace_malloc.c:467)
==3726== by 0x4010CD7: allocate_dtv (dl-tls.c:300)
==3726== by 0x401146B: _dl_allocate_tls (dl-tls.c:464)
==3726== by 0x40405C6: pthread_create@@GLIBC_2.1 (allocatestack.c:570)
==3726== by 0x806BF36: Thread::Thread(void* (*)(void*), void*) (os.cpp:203)
これはコードであり、Valgrindはpthread_create呼び出しです。
Thread::Thread( PFUNC func, void * arg )
{
int s = pthread_create( &_ThreadId, NULL, func, arg); //here is msg from valgrind
if (s != 0)
throw EXCEPT_NOTHREAD;
pthread_detach( _ThreadId );
}
スレッド機能の何が問題になっているのか教えてください。スレッドを作成する前にpthread_detachが必要であるという他の同様の質問を読みましたか?よろしくお願いします。