最初の例は、ポインタを削除しようとすると機能しません。ヌルターミネータを追加するとプログラムがハングするか、ヌルターミネータがないと次のようになります。
Debug Assertion Failed Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
VisualStudio2008から
//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;
では、strcpyの代わりに二重引用符を使用するとどうなりますか?どちらも文字列を完全に削除し、デバッガーは何も変わりません。