Aloque memória e salve a string em c

Eu queria saber por que o código a seguir não está funcionando

int main(int argc, char **argv)
{
     char *test = (char*) malloc(12*sizeof(char));
     test = "testingonly";
     free(test);
}

Depois de pensar nisso, minha suposição era que primeiro eu alocava espaço para 12 caracteres na memória, mas a atribuição na próxima linha cria uma matriz de caracteres na pilha e o endereço de memória é passado para teste. Portanto, free () tenta liberar espaço na pilha, o que não é permitido. Isso está correto?

Então, qual seria a abordagem correta para salvar uma string na pilha? O seguinte é uma maneira comum?

int main(int argc, char **argv)
{
     char *test = (char*) malloc(12*sizeof(char));
     strcpy(test, "testingonly");
     free(test);
}

questionAnswers(6)

yourAnswerToTheQuestion