初心に帰って標準入出力をやってて引っかかったところを質問させていただきます。
とりあえずソースです。
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
int _tmain(int argc, TCHAR* argv[/url], TCHAR* envp[/url])
{
TCHAR* str;
str = (TCHAR*)malloc(sizeof(TCHAR));
if(!str) exit(EXIT_FAILURE);
//_tcscpy_s(str, sizeof(str)/sizeof(str[0]), _T(""));
// ↑だと、free()時に挙動がおかしくなる
str[0] = '\0';
_tprintf(_T("str = %s\n"), str);
free(str);
return 0;
}
コメントで書いた通りですが、_tcscpy_s(..., _T(""))だと、どうもfree()の時に、処理が止まってしまいます。なぜダメなのでしょう?
ちなみに
str = (TCHAR*)malloc(sizeof(TCHAR) * 2);
if(!str) exit(EXIT_FAILURE);
_tcscpy_s(str, sizeof(str)/sizeof(str[0]), _T("x"));
_tprintf(_T("str = %s\n"), str);
free(str);
は大丈夫でした。_T("x")の場合はメモリ上に"x\0"が確保されて、それをstrにコピーするという手順を踏んでいると思うのですが、_T("")はメモリ上に'\0'が確保されるわけではないのでしょうか?1.free()で処理が止まっているとき、いったい何をやっているのか(またはなぜプログラムが進まないのか)
2._T("")ではなぜだめなのか
の2点、ご教示のほどよろしくお願いします。