Witam!
Mam następujący problem. W poniższym kodzie przy próbie uruchomienia wyskakuje komunikat:
glibc detected *** ./a.out: free(): invalid next size (fast): 0x099a90a0 ***
Z tego co wyczytałem dzieję się tak ponieważ staram się zwolnić miejsce w pamięci na które dany wskaźnik już nie wskazuje ponieważ zostały wykonane na nim jakieś operacje. Co lepsze gdy uruchomie kod pod Valgrindem, nie pojawiają się żadne błędy! :/ W czym jest problem?
Proszę o jakieś rady albo 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
char temp1[20];
int i;
int liczbacyfr=0; //zmienna zliczaja liczbe cyfr w kodzie zaszyfrowanym
char *wiadomosc; //zmienna zwracajac tekst zaszyfrowany
static char msgszyfr[4092];
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]);
}
wiadomosc = (char*)malloc((ilecyfr(dlugosc)+dlugosc+liczbacyfr+1) * sizeof *wiadomosc);
for(i=0;i<dlugosc;++i){
sprintf(temp1, "%d", tabzakod[i]);
strcat(wiadomosc,temp1);
strcat(wiadomosc,"$");
memset(temp1, 0x00, 20);
}
strcpy(msgszyfr, wiadomosc);
free(tabkod);
free(tabzakod);
free(wiadomosc);
return msgszyfr;
}