後に削除を使用する必要がありますか、私はミューテックスを初期化するためには私がpthread_mutex_destroyの
pthread_mutex_t *m = new pthread_mutex_t;
pthread_mutex_init(m, NULL);
を使用すると仮定します。そして、後に、私は終わりだ、とpthread_mutex_destroyのを起動し、私はすべてのリソースを解放するために
delete m;
を使用する必要がありますか?
後に削除を使用する必要がありますか、私はミューテックスを初期化するためには私がpthread_mutex_destroyの
pthread_mutex_t *m = new pthread_mutex_t;
pthread_mutex_init(m, NULL);
を使用すると仮定します。そして、後に、私は終わりだ、とpthread_mutex_destroyのを起動し、私はすべてのリソースを解放するために
delete m;
を使用する必要がありますか?
メモリを解放する必要があります。pthread_mutex_destroy
のためにメモリを解放する必要があります。
なぜpthread_mutex_destroyがメモリを解放しないのですか?あなたがこれを行うには許可されているので:
pthread_mutex_t m;
pthread_mutex_init(&m, NULL);
pthread_mutex_destroy(&m); /* Can't free &m. */
あなたはvalgrind
を使用して、それを試すことができます:pthread_mutex_init
を使用して
==836== LEAK SUMMARY:
==836== definitely lost: 24 bytes in 1 blocks
私は混乱しています - 最初のブロックのコードは実際にvalgrindの出力を生成しますか? pthread_mutex_tは静的に割り当てられているので、メモリはどこから漏れていますか? –
@WayneUrodaいいえ、それはそのコードからの出力ではありません。それはOPのコードからの出力です。私は単に 'pthread_mutex_destroy'がそのパラメータを解放できない理由を説明していました。 – cnicutar
私はこのような基本的な質問をしたことがあり、3年前*の正解を受け入れていないことを間違いなく知りました。多分私に記憶喪失があったでしょうか? –
ミューテックスの初期化は、異なる側面です。オブジェクト(タイプpthread_mutex_t
)に割り当てられたメモリを持つことは、異なる側面です。
使用初期化ライブラリのルーチンは、ヒープ上またはスタック上にメモリを割り当てることとは異なります。 FILE *をローカル変数として使用して、ファイルポインタを初期化するのと同じです。fopen
通常、mutexを動的に割り当てません( 'm')。通常、mutexはオブジェクトです。 init関数が正しく初期化できるように、オブジェクトのアドレスを渡します。 (これは通常、オブジェクトを動的に割り当て、渡された場所にポインタを置くことを意味します(othread_mutex_tが不透明な理由があります))。 –