続Unicodeについて メモリクリアできません


ぱすた  2007-06-01 05:26:14  No: 65260

お世話になります。
先日、AnsiからUnicodeへの変換についておしえていただきました。
変換自体は、思うとおりに出来たのですが、その後メモリのクリアが出来なくて
行き詰まってしまいした。

コードは下記のようなものです。
scrには、"ID"を渡しています。
  
  char* str = new char[len + 2];

  strcpy(str, scr);
  *(str + len) = '\n';
  *(str + len + 1) = '\0';

  int nn = ::MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);

  wchar_t* pUnicode = new wchar_t( nn );

  ::MultiByteToWideChar(CP_ACP, NULL, str, -1, pUnicode, nn);

  delete [] pUnicode;    <-ここでメモリリークを起こします
  delete [] str;

pUnicodeはつぎの通り
0x0069
0x0064
0x000a
0x0000

エラー内容はつぎの通りです
memory check error at 0x00513052 = 0x64, should be 0xFD.
memory check error at 0x00513053 = 0x00, should be 0xFD.
memory check error at 0x00513054 = 0x0A, should be 0xFD.
memory check error at 0x00513055 = 0x00, should be 0xFD.

このエラーに引っかかって進めなくなってしまいました。
よろしく、お願い致します。


επιστημη  2007-06-01 06:16:29  No: 65261

× new wchar_t( nn );
○ new wchar_t[ nn ];

※ ただしnnは文字数+1


επιστημη  2007-06-01 06:24:36  No: 65262

ところでそれは"メモリのクリア"ではありません、"メモリの解放"です。


tetrapod  2007-06-01 17:56:10  No: 65263

文字数+1 は \0 分を含んでという趣旨と思うんだけど
strlen (_tcslen) の返却値+1 ということならまったくもって御意。
でもこの例のように MultiByteToWideChar において cchMultiByte = -1 を指定した場合
返却値には \0 を含む文字数が返されるので new wchar_t [nn] でいいと思う。


επιστημη  2007-06-01 20:51:48  No: 65264

そーなんだー。フォローありがとです。


ぱすた  2007-06-02 04:02:18  No: 65265

επιστημηさま  tetrapodさま

ご指導有難うございました。

ずっと、にらめっこしてたんですが、こんなところが違ったとは

やっと、スッキリできました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加