Я пытаюсь преобразовать последовательность многобайтовых символов в соответствующую последовательность широких символов, используя 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;
}
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];
,
Других решений пока нет …