堆内存分配崩溃与std :: wstring

我对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] = '';

std::wstring data(buffer);
崩溃是在最后一行,如果我使用以下行不会发生:
std::wstring data(L"hello");
错误是内存堆分配失败,结果是程序崩溃。为什么?怎么了?     
已邀请:
wchar_t *buffer2 = (wchar_t*)malloc((size + 1) * sizeof(wchar_t));
                                               ^^^^^^^^^^^^^^^^^
malloc
分配了一些字节 - 你不是一些
wchar_t
如果你使用的是c ++,那么正确的方法是:
wchar_t *buffer2 = new wchar_t[size+1];
    
如果你使用std :: wstring,我假设你使用的是C ++,不要使用malloc,请使用new&删除(只是旁注)     
std :: vector似乎是一个在这里制作缓冲区的好方法。它的构造函数接收元素编号(而不是字节),您不必记住删除内存。     

要回复问题请先登录注册