L'affectation Opt_name[0] = "-h" est bien-sûr parfaitement légitime mais comme cela a été dit, occasionne une fuite de mémoire dans la mesure où la mémoire précédemment allouée par calloc (Opt_name[i] = (char *) calloc ...) n'est plus accessible. Soit tu dois supprimer les calloc, soit tu les maintiens et tu utilises un strcpy.
A un moment donné, tu sous-entend que tu as épuré le code des free pour la lisibilité sur ce forum.
Attention, l'instruction free(Opt_name[i]) devient erronée après l'affectation Opt_name[0] = "-h" ...