さきほどつくった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