以下に示すのは、動的記憶域の解放の例(リストセルの削除関数)です。
この関数では、消去すべきセルを指すポインタはptrとしています。この関数の実行後、ptrで指されていた領域はリスト構造からは外れ、どこからも参照されなくなります。しかしながら、これは動的記憶域でありますので、全体のプログラムの実行が終らない限り、この領域は確保されたままになります。
<問題>:
ポインタ消去後、これを解放するには、どのようにすれば良いでしょうか?
- (a)プログラムリスト
void delete_list(struct ulist *ptr, int data) { struct ulist *qtr; while (ptr != NULL) { if (ptr->key < data) { break; } qtr = ptr; ptr = ptr->next; } if (ptr != NULL) { /* delete */ qtr->next = ptr->next; } }
- (b)ヒント
- 以下の様に、free()を用いて、ptrで指されている領域を開放すればよい。
void delete_list(struct ulist *ptr, int data) { struct ulist *qtr; while (ptr != NULL) { if (ptr->key < data) { break; } qtr = ptr; ptr = ptr->next; } if (ptr != NULL) { /* delete */ qtr->next = ptr->next; free(ptr); /* free memory */ } }