さきほどつくったstruct ListAの場合です。 ListA をつくるための関数 ListA_tp new_ListA() をつくります。 malloc は、heap からしていされたサイズの領域を切り取ってくるので、
ListA_tp new_ListA() { ListA_tp result = (ListA_tp)malloc(sizeof(ListA_t)); if(result == NULL) { printf("Memory Exhausted!!\n"); exit(1); } return result; }これで終りです。malloc()は必要なサイズを要求すれば、その分のメモリを確保して、 void*として返してくれます。 ですから、利用する型(ListA_tp)に型変換(cast)して、 利用しましょう。
逆に、返す場合は、free してやることになります。これで、malloc/free などを提供している メモリ管理機構(Memory Management System)は、この領域を再利用してくれることでしょう。
void free_ListA(ListA_tp target){ free((void*)target); }もうちょっと凝ったことをしたいという人は、こちら。
2001.11.20/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp