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

时间:2011-04-10 13:30:01

标签: c++ unicode crash 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);

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

std::wstring data(L"hello");

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

3 个答案:

答案 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似乎是一个在这里制作缓冲区的好方法。它的构造函数接收元素编号(不是字节),你不必记住删除内存。