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