C言語 確保した動的メモリの解放 - stdlib.h - [ free ]
2008.11.01 Saturday | by LRESULT
動的メモリ確保の第四弾、メモリの解放を行うには、free()を使います。
※ 第一弾 malloc()は、こちら。
※ 第二弾 calloc()は、こちら。
※ 第三弾 realloc()は、こちら。
この free()は、動的メモリ領域の確保を行うための、
malloc()、calloc()、realloc()という関数と必ずセットで使用します。
動的メモリの解放を忘れて、新たに領域を確保してしまったりしていくと、
どんどん使用されない領域が増えてしまい、メモリ領域を食い潰してしまいます。
メモリ領域の解放忘れのことを「メモリリーク」と言います。
書式 | void free( void *ptr ) |
---|---|
機能 | 確保した動的メモリ領域の解放 |
引数 | void *ptr : malloc()などで確保したメモリ領域のポインタ |
戻り値 | なし |
動的メモリを malloc()で確保し、そのアドレスを確認してみます。 その後、free()で領域を解放し、もう一度アドレスを確認してみます。 |
---|
#include <stdio.h> |
003A2FC0 003A2FC0 |
---|
環境や確保する領域によって、アドレスに違いはありますが、 このように表示されます。 つまり、free()を実行しても、 確保した領域は解放されるが、アドレスはNULLになっているわけでは無いという事です。 ( これもOSによっては、NULLが入る事もありますが。 ) というわけで、実際には解放されているのに、 NULLチェックをすり抜けてしまう場合がある為、 free()の後には、mbuf = NULL; というようにNULLを入れましょうという話。 |