// 例題7 member.c #include #include #include #include #include "member.h" static int used=0; inline Member *new_member() { Member *mp = (Member*)malloc(sizeof(Member)); if (mp==0) return 0; bzero(mp,sizeof(Member)); used++; return mp; } inline void delete_member(Member *mp) { free(mp); used--; } char *gettoken(char **s, int maxlen) { if (s==0 || *s==0) return ""; char *s2=*s; int i=0; while (*s2 && iname = gettoken(&s,255); mp->address = gettoken(&s,255); return mp; } void write_member(const Member *mp,FILE *ofp) { fprintf(ofp, "(%s,%s)\n", mp->name, mp->address); } void read_member_list(Member *mp) { Member *mp2; while (mp2 = read_member(stdin)) { mp->next=mp2; mp=mp2; } } void write_member_list(const Member *mp) { if (mp==0) return; mp=mp->next; while (mp) { write_member(mp,stdout); mp = mp->next; } } void delete_member_list(Member *mp) { Member *mp2; if (mp==0) return; mp2=mp->next; mp->next=0; mp=mp2; while (mp) { mp2=mp->next; delete_member(mp); mp = mp2; } } Member root; // リストの先頭 int main() { read_member_list(&root); write_member_list(&root); printf("used=%d\n",used); delete_member_list(&root); printf("used=%d\n",used); // 0以外ならメモリリーク発生 write_member_list(&root); return 0; }