Сбой выделения памяти кучи с помощью std :: wstring - PullRequest
0 голосов
/ 10 апреля 2011

У меня большая проблема с распределением памяти в 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");

ошибка - ошибка выделения кучи памяти, и результатом является сбой программы. Зачем? Что не так?

Ответы [ 3 ]

7 голосов
/ 10 апреля 2011
wchar_t *buffer2 = (wchar_t*)malloc((size + 1) * sizeof(wchar_t));
                                               ^^^^^^^^^^^^^^^^^

malloc выделяет количество байтов - вам не нужно число wchar_t

Если вы используете c ++, правильный путь:

wchar_t *buffer2 = new wchar_t[size+1];
5 голосов
/ 10 апреля 2011

Если вы используете std :: wstring, я предполагаю, что вы используете C ++, не используйте malloc, используйте new & delete (только примечание)

0 голосов
/ 10 апреля 2011

std :: vector, кажется, хороший способ сделать буфер здесь. Его конструктор получает номер элемента (не байтов), и вам не нужно помнить, чтобы удалить память.

...