0

関数を使用して、マルチバイト文字のシーケンスを対応するワイド文字のシーケンスに変換しようとしていmbstowcs_sます。しかし、私は次のヒープ破損の問題を抱え続けています。誰かがそれを修正する方法を教えてもらえますか?

ここに画像の説明を入力してください

これがサンプルコードです。デバッグするとき、それは常にdelete wc_name問題を引き起こしている行です。私はそれがそうであるべきではないことを知っています。

#include <Windows.h>
#include <iostream>
#include <string>
int main (int argc, char *argv[]) { 
    size_t returnValue; // The number of characters converted.
    const size_t sizeInWords = 50; // The size of the wcstr buffer in words
    const char* c_name = "nanana"; // The address of a sequence of characters
    wchar_t *wc_name = new wchar_t(50); 

    errno_t err = mbstowcs_s(&returnValue, wc_name, sizeInWords, 
                                              c_name, strlen(c_name) );

    wcout << wc_name << endl;
    delete wc_name;
    return 0;
}
4

1 に答える 1

5

wchar_t *wc_name = new wchar_t(50);wchar_t *wc_name = new wchar_t[50];配列を割り当てる必要があります。そして対応するdelete wc_name必要がありますdelete[] wc_name;。ところで、コンパイル時の配列自体のサイズがわかっている場合は、動的メモリ割り当ては必要ありません。あなたは単にすることができますwchar_t wc_name[50];

于 2013-03-08T04:22:59.683 に答える