我的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");
错误是内存堆分配失败,结果是程序崩溃。为什么?怎么了?
答案 0 :(得分:7)
wchar_t *buffer2 = (wchar_t*)malloc((size + 1) * sizeof(wchar_t));
^^^^^^^^^^^^^^^^^
malloc
分配了一些字节 - 你不是一些wchar_t
的
如果您使用的是c ++,正确的方法是:
wchar_t *buffer2 = new wchar_t[size+1];
答案 1 :(得分:5)
如果你使用std :: wstring我假设你使用的是C ++,不要使用malloc,请使用new&删除(只是旁注)
答案 2 :(得分:0)
std :: vector似乎是一个在这里制作缓冲区的好方法。它的构造函数接收元素编号(不是字节),你不必记住删除内存。