pit-rayの備忘録

開発中に得た知識を記事にしていくブログ

<C言語>解放後のポインタにNULLを代入するべき(ダングリングポインタ)

今回題材とするのはダングリングポインタ(dangling pointer)です。
ここで出てくるdanglingというのはぶら下がるという意味で、ポインタがどこのメモリを指しているのかわからない状態を指します。

ダングリングポインタは攻撃ができる脆弱性につながる可能性があります。
そのため、プログラムのセキュリティを向上させるために今一度確認してみてください。

今回特に取り上げるのはfree関数で解放したポインタに関するものです。
free関数で解放したポインタというのはどこのメモリを指しているのかわからない状態、つまり、ダングリングポインタになっています。

対策としてはそこまで大変ではなく、free関数の後に開放したポインタにNULLを代入し、ヌルポインタにするだけです。これで、ダングリング状態から外れます。

ここで、ダングリングポインタで危険なのは解放済みのメモリにアクセスするということであるため、free関数直後にreturnで値を返す場合は特にNULLにしなくても大丈夫です。



<まとめ>
解放したポインタにアクセスする可能性があるときはNULLを代入する

<参考文献>
MEM01-C. Store a new value in pointers immediately after free() - SEI CERT C Coding Standard - Confluence
MEM30-C. Do not access freed memory - SEI CERT C Coding Standard - Confluence