Por que um ponteiro para uma matriz char precisa ser strcpy para atribuir caracteres a sua matriz e a atribuição de aspas duplas não funcionará?

O primeiro exemplo não funciona quando você vai apagar o ponteiro. O programa ou trava quando eu adiciono o terminador nulo ou sem ele eu recebo:

Debug Assertion Failed Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) do Visual Studio 2008

//Won't work when deleting pointer:
    char *at = new char [3];
    at = "tw"; //   <-- not sure what's going on here that strcpy does differently
    at[2] = '\0'; // <-- causes program to hang
    delete at;

//Works fine when deleting pointer:
    char *at = new char [3];
    strcpy(at,"t");
    at[1] = 'w';
    at[2] = '\0';
    delete at;

Então, o que está acontecendo quando eu uso aspas duplas em vez de strcpy? Ambos vão coutar a string perfeitamente e o debugger não mostra nada diferente.

questionAnswers(9)

yourAnswerToTheQuestion