Witam wszystkich!
Mam problem z kodem zamieszczonym niżej. Otóż po wywołaniu funkcji są jakieś błędy w pamięci i "krzaczy" pierwsze kilka znaków w stringu, potem jest ok. Czy w zły sposób alokuje i zwalniam pamięć? Proszę o pomoc i jakieś wskazówki :)
char *szyfruj(char *tekst, uint e, uint modul){
int *tabkod, *tabzakod; //tablice do zapisywania pojedyńczych znaków niezakodowanych i zakodowanych
int dlugosc = strlen(tekst); //liczba wyrazów w tekscie
int i;
int liczbacyfr=0; //zmienna zliczaja liczbe cyfr w kodzie zaszyfrowanym
char *wiadomosc; //zmienna zwracajac tekst zaszyfrowany
char *temp; //zmienna tymczasowa do przechowywania pojedynczego znaku
tabkod = (int*)malloc(dlugosc * sizeof *tabkod);
tabzakod = (int*)malloc(dlugosc * sizeof *tabzakod);
for(i=0;i<dlugosc;++i){
tabkod[i]=(int)tekst[i]; //operacja rzutowania z char na int
tabzakod[i]=pot_mod(tabkod[i],e,modul);
liczbacyfr=liczbacyfr+ilecyfr(tabzakod[i]);
printf("%i", ilecyfr(tabzakod[i]));
}
wiadomosc = (char*)malloc((ilecyfr(dlugosc)+dlugosc+liczbacyfr+1) * sizeof *wiadomosc);
sprintf(wiadomosc, "%d", dlugosc);
strcat(wiadomosc," ");
for(i=0;i<dlugosc;++i){
temp=(char*)malloc(ilecyfr((tabzakod[i]+1)) * sizeof *temp);
sprintf(temp, "%d", tabzakod[i]);
strcat(wiadomosc,temp);
strcat(wiadomosc," ");
free(temp);
}
/*
printf("Ile cyfr %i\n", liczbacyfr);
printf("Licznik: %i\n", dlugosc);
for(i=0;i<dlugosc;++i){
printf("%i ", tabzakod[i]);
}
*/
free(tabkod);
free(tabzakod);
free(wiadomosc);
return wiadomosc;
}
//edit
Wrzucam też cały kod http://4programmers.net/Pastebin/2802