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.