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

Ste*_*ano 0 c++ crash unicode 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] = '\0';

std::wstring data(buffer);
Run Code Online (Sandbox Code Playgroud)

崩溃是在最后一行,如果我使用以下行不会发生:

std::wstring data(L"hello");
Run Code Online (Sandbox Code Playgroud)

错误是内存堆分配失败,结果是程序崩溃.为什么?怎么了?

Eri*_*rik 7

wchar_t *buffer2 = (wchar_t*)malloc((size + 1) * sizeof(wchar_t));
                                               ^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

malloc分配的字节数-你wan't一些wchar_t

如果你使用的是c ++,那么正确的方法是:

wchar_t *buffer2 = new wchar_t[size+1];
Run Code Online (Sandbox Code Playgroud)


sno*_*kin 5

如果你使用std :: wstring我假设你使用的是C++,不要使用malloc,使用new&delete(只是旁注)