これに対して非常に混乱します。私はちょうどポインタについて学び始めて、少し深めてスレッドを試してみることに決めました。私は何をしようとしていることは、スレッドへのポインタを渡しているので、(data
をINGのmalloc
後)私が呼ん:newClient
関数の内部空きスレッドが原因でセグメンテーションエラーが発生する
pthread_create(&ptThread, &ptAttr, newClient, (void *) data);
、と(私は何をする必要があるかやる、と私が決めました割り当てられたポインタはそれを解放すること)があった:
void *newClient(void *v) {
// ...stuff happens here...
free(v);
}
free(v);
部には、私は、セグメンテーションフォールトを取得します。だから私はvalgrindのを使用して、私はこれが無効無料だったと言ってしまった:
==1214== Invalid free()/delete/delete[]
==1214== at 0x4023B6A: free (vg_replace_malloc.c:366)
==1214== by 0x804F622: newClient (xxxxxx2.c:44)
==1214== by 0x4032954: start_thread (pthread_create.c:300)
==1214== by 0x4112E7D: clone (clone.S:130)
==1214== Address 0x4 is not stack'd, malloc'd or (recently) free'd
私は私のプログラムを終了すると、火災に追加するには、valgrindのは「v
がfree
なかったので、私はメモリリークを持っていた私に言いましたd:
==1214== 8 bytes in 2 blocks are definitely lost in loss record 1 of 1
==1214== at 0x4023F50: malloc (vg_replace_malloc.c:236)
==1214== by 0x804F453: main (xxxxxx1.c:94)
私の質問 - どのように無料の無料ですか?私がここで紛失しているものはありますか? free(v);
する必要がありますか?
は 'data'単純ポインタですか?変数の定義とmallocをコードの関連部分に記述してください。 –
コードは不十分ですが、* data *はmalloc()で割り当てたポインタのようには見えません。そうだったら、あなたはvoid * castを使わなかったでしょう。割り当てられていないものをfree()しないでください。 –