アルゴリズムとデータ構造 補足資料12-1 「mallocとfree」 (簡易版) 横浜国立大学 理工学部 数物・電子情報系学科 富井尚志 struct list { int key; struct list *next; }; key next 21 NULL の「ひな形」(型) struct list { int key; next は、struct list型へのポインタ struct list *next; next が指し示す先の要素はstruct list型 つまりこういうこと。 }; key next 21 key next 22 NULL 1.メモリに割当てる p = (struct list *)malloc(sizeof(struct list)); 2.その量は、”struct list”型1個分 3.mallocの戻り値は、割当てたメモリの先頭アドレス 4.そのアドレス(参照先)の中身は “struct list”型として、「キャスト」(型変換) 5.“struct list”型へのポインタとして、アドレスを代入 この書き方は、憶えましょう。 結果は ↓これ(1個割当て) p key next 21 NULL 要するに、 新しく「箱」ができる。 この箱に名前(変数名)はない。 だから、ポインタ変数pで指し示しておく必要がある。 free(p); malloc関数で割り当てられた この名前のない「箱」の領域は、 開放する(使わなかったことにする)ことができる。 この書き方は、憶えましょう。 結果は ↓これ p 赤い箱は解放された。 つまり、このメモリは、別のプログラムや別の機会に使われる。 でも、ポインタ変数pにアドレスだけは残っている。 うっかりpの参照先に代入しようとすると、OSが怒る。(Segmentation Halt) p->key は、int型の値をもつ p->next->key p key 21 next p->next は、struct list型へのポインタを値としてもつ key next 22 NULL p->next->next
© Copyright 2024 ExpyDoc