I haven't had a full look at your code and issue but I don't see a reason to remove or recreate them at all. Just use str_cpy to fill them with new content, once initialized.

Additionally, you overuse str_create way too much. Every time you call str_create you need a corresponding ptr_remove in your code, which means that something like
game_save(str_create("test"),1,SV_ALL);
will result in one new string floating in your memory which you cannot clear because you didn't save the pointer to it. Just write
game_save("test",1,SV_ALL);
instead.
When you keep the strings alive (I suggest you initialize them once at the start of the game) be aware that stuff like
FileNames[i] = str_create((txtStringSave.pstring)[i]);
has to be adapted to a single str_cpy call instead.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends