Здравствуйте!
Собственно, началось все с того, что при написании класса стала портиться куча после инициализации массива TCHAR

Экспериментальным путем дошел до того, что:
size_t iLen=_tcslen(_T("RUAHM About Window Class")); // len=0x18=24 // подстраховка, мало ли о_О
TCHAR *sClass=new TCHAR[++iLen]; // iLen+1=0x19=25 (++ for null-terminated)
ZeroMemory(sClass, iLen*sizeof(TCHAR)); // iLen*sizeof(TCHAR)=0x32=50
_tcscpy_s(sClass, iLen*sizeof(TCHAR), _T("RUAHM About Window Class")); // iLen*sizeof(TCHAR)=0x32=50
delete []sClass; // HEAP[RUAHM_About.exe]: Heap block at 00AD35A0 modified at 00AD35FE past requested size of 56
Если идти в недра CRT, видно, что в new передается как раз не
0x19 (25), а
0x32 (50), т.е выделяются нужные
50 байт памяти.
После я копирую строку длинной
0x19 (25) (+ завершающий ноль) (Unicode строка, 2 байта на один символ) — на этом куча портится.
Это все в debug версии, в release проблем нет О_о
Вопрос: Что я делаю не так?
P.S: код
TCHAR *s=new TCHAR[++iLen*sizeof(TCHAR)]; // (iLen+1)*2=0x32=50 (++ for null-terminated)
Уже не вызывает проблем, но выделяется же 100 байт памяти, а не 50. Разве так и надо? Я что-то где-то упустил?
Объясните, пожалуйста.
Заранее спасибо!