Liberar malloc no borrará los datos de char
Hice un escenario más pequeño de mi mayor problema. Lo que trato de hacer es pasar una cadena a una función que haga una nueva cadena. Sin embargo, me encontré con algunos problemas.
He definido una cadena como
typedef char string[1024];
Entonces tengo una función que toma una cadena y crea una nueva cadena que se llena con la cadena anterior y un punto char
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;
}
Entonces, en principal, trato de usar esta función 3 veces para una nueva cadena 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
}
Este es el resultado extraño que obtengo:
str: .test
str: .test.test
str: .test.test.test
Cuando esperaría obtener:
str: .test
str: .test
str: .test
¿Alguien que pueda señalar lo que está sucediendo? Algo más que encuentro extraño es que puedo imprimir el valor de newStr justo después de tenerliberad eso