代入されてない場合freeのしようが無いですよね.

こんな場合は?
char *a = "hoge";
printf("%s", strdup(a));

やはりメモリの無駄使いになるんでしょうか.