WindowsCE内での文字コードはUNICODEである。UNICODEはすべての文字が2バイトで表現される。
CString型の文字をChar型にキャストする際に、メモリ割り当てするためにバイト数を取得しようと
char *p = new char[work.GetLength()];
としたのだが、GetLength()で得られるのは文字数であり、このままでは、十分なメモリ確保ができない。
これに気付かず、エラーの連続だったのだ。
で、メモリ確保は、
char *p = new char[work.GetLength()*2];
とした。これで、エラーは出なくなった。
このあたりのことは、
Windows CE FAN の記事に詳しい。