Toto je prvy pripad:
Kód:
char *NajdiNahrad(char *vstup, char *s1, char *s2) {
    char *pracovni;
    pracovni = (char *) malloc(256);
    /* blabla */
    return pracovni;
}
Vzdy pri pouziti funkcie alokujes pamat a nikdy ju neuvolnujes - memory leak.

Toto je druhy pripad:
Kód:
char *NajdiNahrad(char *vstup, char *s1, char *s2) {
    char *pracovni;
    pracovni = (char *) malloc(256);
    /* blabla */
    free(pracovni);
    return pracovni;
}
Tu sice pamat uvolnis, ale ten pointer, co si vratil, je neplatny. Ukazuje do pamati, ktora nie je alokovana.

Malo by to byt takto:
Kód:
char *NajdiNahrad(char *vstup, char *s1, char *s2, char *vystup, int max_dlzka) {
    char *pracovni;
    pracovni = (char *) malloc(256);
    /* blabla */
    strncpy(vystup, pracovni, max_dlzka);
    free(pracovni);
    return vystup;
}
Pricom vystup musi ukazovat na nejaku alokovanu pamat velkosti max_dlzka.