strdupが使われている個所でメモリリークが起きていた。
Man page of STRDUP
Man page of BASENAME
char *dirc, *basec, *bname, *dname; char *path = "/etc/passwd"; dirc = strdup(path); basec = strdup(path); dname = dirname(dirc); bname = basename(basec); printf("dirname=%s, basename=%s\n", dname, bname);
まさにこれそのままのコードが使われていて、freeが抜けていたというバグ。
サンプルを参考に使うのは別に構わないが、そこに出てきた見覚えのない関数・ロジックを なんの疑問も持たずにコピペするのは言語道断だ。
「strdupってなに? まー知らんけどそのまま使お」 とか技術者として恥ずべき行為