Witam.
Napisalem (probowalem) napisac funkcja sklejajaca wyrazy w zdanie, dynamicznie alokujaca pamiec. Wszystko wydaje sie działać, jednak po ponownym uruchomieniu tej samej funkcji (drugi raz w tym samym wywołaniu programu) w zmiennej result pozostaje wynik z poprzedniego wywołania funkcji.. Nie rozumiem dlaczego skoro zwalniam pamięć przed wyjsciem z funkcji.
void Cat(){
char **words, *tmp_w, *result;
int len=10, i=0, j=0,x=0, num=0, ch;
printf("Ile wyrazow chcesz wczytac?: ");
scanf("%d",&num);
getchar();
/*Poczatkowa alokacja pamieci*/
words=(char**)malloc(num*(sizeof(char*)));
result=(char*)malloc(num*len*sizeof(char));
for(i=0;i<num;i++){
words[i]=(char*)(malloc(len*sizeof(char)+1));
if (words[i]==NULL) exit(1);
}
/*Wczytywanie wyrazow*/
for(i=0;i<num;i++){
j=0;
printf("Wyraz [%d]: ",i);
while((ch=getchar())!='\n'){
/*Realokacja pamieci w wypadku gdy wyraz jest za dlugi*/
if(j > len-1){
len*=2;
if((tmp_w=(char*)(realloc(result,num*len*sizeof(char))))==NULL)
exit(1);
result=tmp_w;
for(x=0;x<num;x++){
if((tmp_w=(char*)(realloc(words[x],len*sizeof(char))))==NULL){
printf("Blad realokacji pamieci!\n");
for(i=0;i<num;i++){
free(words[i]);
}
free(words);
free(result);
break;
}
else
words[x]=tmp_w;
}
}
words[i][j++]=ch;
}
words[i][j]=0;
}
/*Polaczanie wyrazow w zdanie*/
for(i=0;i<num;i++){
strcat(result,words[i]);
strcat(result," ");
}
printf("\nZdanie: %s",result);
/*Zwalnianie pamieci */
for(i=0;i<num;i++){
free(words[i]);
}
free(words);
free(result);
getchar();
}