Freeing malloc não apagará dados de caracteres
Eu fiz um cenário menor do meu maior problema. O que eu tento fazer é passar uma string para uma função que fará dela uma nova string. No entanto, tive alguns problemas.
Eu defini string como
typedef char string[1024];
Então eu tenho uma função que pega uma string e cria uma nova string que é preenchida com a string antiga e um caractere de ponto
string* add_sth_to_string(char* msg){
string* newStr=malloc(sizeof(string)); // malloc a newStr
strcpy(*newStr, msg); // copying msg to newStr
char buff[1024]; // making a buffer
strcat(buff, "."); // adding a dot to buffer
strcat(buff, *newStr); // adding msg to buffer
strcpy(*newStr, buff); // copying buffer to newStr
return newStr;
}
Em seguida, tentei usar esta função três vezes para uma nova string de cada vez:
for (i=0; i<3; i++){
string* newStr;
newStr=add_sth_to_string("test");
printf("str: %s\n", *newStr);
free(newStr);
// can even printf here
}
Esta é a saída estranha que recebo:
str: .test
str: .test.test
str: .test.test.test
Quando esperaria obter:
str: .test
str: .test
str: .test
Qualquer pessoa que possa apontar o que está acontecendo? Outra coisa que acho estranha é que posso imprimir o valor de newStr logo depois de ter liberado isto