Toto je prvy pripad:
Vzdy pri pouziti funkcie alokujes pamat a nikdy ju neuvolnujes - memory leak.Kód:char *NajdiNahrad(char *vstup, char *s1, char *s2) { char *pracovni; pracovni = (char *) malloc(256); /* blabla */ return pracovni; }
Toto je druhy pripad:
Tu sice pamat uvolnis, ale ten pointer, co si vratil, je neplatny. Ukazuje do pamati, ktora nie je alokovana.Kód:char *NajdiNahrad(char *vstup, char *s1, char *s2) { char *pracovni; pracovni = (char *) malloc(256); /* blabla */ free(pracovni); return pracovni; }
Malo by to byt takto:
Pricom vystup musi ukazovat na nejaku alokovanu pamat velkosti max_dlzka.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; }





Odpověď s citací