すみません、ポインターを 2 回 free() すべきではないことはわかっていますが、まだ解放されていないかどうかを確認するにはどうすればよいですか? nullかどうかを確認しますか?free() コマンドはメモリに null を書き込まず、単にスペースを解放するだけだと誰かが私に言ったので、私は知りません! ヘルプ !!どうもありがとう !
void buffer_destroy(buffer_t* buffer){
if(buffer==NULL){
return ;
}
int i;
if(buffer->size>0){
for(i=0;i<buffer->size;i++){
msg_destroy_string(buffer->array_msg[i]);
}
}
free(buffer->array_msg);
free(buffer);
実際には、関数を起動し、「バッファ」と呼ばれるポインタを引数として取るbuffer.caスレッドがあります。次に、このスレッドでpthread_joinを呼び出しますが、起動時にすべての引数が自動的に渡されるかどうかはわかりません(この場合、これ"buffer" と呼ばれるポインタ) は free() になります。2 番目の瞬間に double free() 呼び出しでエラー/例外が発生したため、引数として "buffer" を使用したため、スレッドの最後で最初の free が自動的に呼び出された可能性があります。