0

std::wstringのメモリ割り当てに大きな問題があります。このコードを使おうとすると、プログラムがクラッシュします。

size_t size;
mbstowcs_s(&size, NULL, 0, buffer, _TRUNCATE);
wchar_t *buffer2 = (wchar_t*)malloc(size + 1);
mbstowcs_s(&size, buffer, buffer_size, buffer, _TRUNCATE);
buffer2[size] = '\0';

std::wstring data(buffer);

クラッシュは最後の行にあり、次の行を使用しても発生しません。

std::wstring data(L"hello");

エラーはメモリヒープ割り当ての失敗であり、結果はプログラムのクラッシュです。なんで?どうしたの?

4

3 に答える 3

7
wchar_t *buffer2 = (wchar_t*)malloc((size + 1) * sizeof(wchar_t));
                                               ^^^^^^^^^^^^^^^^^

mallocいくつかのバイトを割り当てます-あなたはいくつかのwchar_t'を必要としません

C ++を使用している場合、正しい方法は次のとおりです。

wchar_t *buffer2 = new wchar_t[size+1];
于 2011-04-10T13:31:05.570 に答える
5

std :: wstringを使用する場合は、C ++を使用していると思いますが、mallocは使用せず、new&deleteを使用してください(補足)

于 2011-04-10T13:34:42.353 に答える
0

std :: vectorは、ここでバッファを作成するための良い方法のようです。そのコンストラクターは要素番号(バイトではなく)を受け取り、メモリを削除することを覚えておく必要はありません。

于 2011-04-10T14:22:45.773 に答える