next up previous contents
Next: メモリリークと2重解放 Up: C言語プログラミング上級編3 - メモリ管理 - Previous: メモリの確保   Contents

メモリの解放

メモリ開放とは、動的に確保したメモリの使用を止め、 次回のメモリ確保対象のメモリにすることを言う。 開放されるメモリは、malloc(), calloc(), realloc()関数で確保したメモリである。 開放するには、free()関数を使用する。 free()関数を使用する場合も、stdlib.hをインクルードしなければならない。 以下、関数仕様を示す。


void free(void *ptr)
/* ptr : malloc()等の関数で確保されたメモリ番地 */

例えば、malloc()関数でint型100個を確保した場合に、そのメモリ解放は次のようになる。


int *iptr;
iptr = (int *)malloc(sizeof(int)*100);
free(void *iptr);

メモリ開放後、ポインタ変数はNULLにはならないので注意が必要である。 もし、メモリ開放後にポインタが指し示す番地の値を参照した場合、 開放される前の値が入っている保証はない。 また、メモリ解放後にポインタが指し示す番地に値を書き込むと、メモリ破壊を引き起こし、 プログラムが異常終了する危険性がある。



Subsections

kojima hirohisa
2001-03-05