Don't use assignment (=) to set the contents of a variable allocated by calloc. Use strcpy().
You create a string constant with the following statement.
str1 = "Hello";
"Hello" is assigned memory at compile time. When the above statement is executed, you change the value of the str1 pointer to point to wherever the string constant is in memory. It no longer points to the memory allocated by calloc. You can watch this in the debugger. Set a breakpoint at str1 = "Hello";. Point to str1 and see the value of the pointer. Press F10 to continue to the next statement. Check the value of the pointer again. The pointer has changed, not just the contents.
Try this instead.
void TryFreeMemory(char *str)
{
char *str1;
str1 = calloc(100, sizeof(char));
strcpy(str1, "Hello");
strcpy(str, str1);
free(str1);
}