タイトルが示すように、私は C を初めて使用し、間もなく中間試験を控えています。私は現在、過去の論文から改訂を行っており、繰り返されるテーマは二重自由問題です。同じメモリ位置を 2 回呼び出すプロセスであることは理解していますが、free()
答え方が 100% わからないいくつかの質問があります。
質問 1: C での double free の結果は何ですか? また、なぜこのような問題が生じるのですか?
これにより、二重解放が発生します。
char* ptr = malloc(sizeof(char));
*ptr = 'a';
free(ptr);
free(ptr);
これに対する私の回答は、0x0 メモリ アドレスが返され、システムの不安定性やクラッシュが発生するというものです。また、記憶が正しければ、ダブル フリーは実際にはmalloc
2 回呼び出すことができ、その結果バッファ オーバーフローが発生し、システムが脆弱なままになります。
この質問を簡単に要約するには、どうするのが一番良いでしょうか?
質問 2: C で double free を導入するのが特に簡単な状況を説明してください。
あなたの周りにポインターを渡すと、ある関数で誤って解放し、気付かずに再び解放する可能性があると考えていましたか?
繰り返しますが、これを要約する「最良の」方法は何ですか?