我有一个函数可以在 wchar_t* 中创建 const char* 的副本
wchar_t* to_wchar(const char* line)
{
size_t line_length = strlen(line) + 1;
wchar_t* wchar_name_temp = new wchar_t[line_length];
size_t outSize;
mbstowcs_s(&outSize, wchar_name_temp, line_length, line, strlen(line));
wchar_t* wchar_name = wchar_name_temp;
delete[] wchar_name_temp;
return wchar_name;
}
但是当我在主函数中调用它时,我遇到的问题是,在一定数量的符号(对我来说是 44 个)下,它分配了在函数第二行的堆上分配的地址,尽管创建了一个副本堆栈中该行的
int main()
{
wchar_t* str = to_wchar("10010101010101010101010101010101010101010101"); //random line
return 0;
}
尽管在堆栈中创建该行的副本
您尚未制作任何副本。您已经分配了一个指针。这就是您的代码所说的,这就是它所做的。
wchar_t* wchar_name = wchar_name_temp;
delete[] wchar_name_temp;
return wchar_name;
这会删除分配的内存,然后立即返回它,这几乎肯定是不正确的。如果您想像这样复制堆分配的 C 样式数组,则需要使用
for
循环或 std::copy
显式执行此操作。
但在这个简单的示例中,您应该只返回
wchar_name_temp
并完全忘记删除,因为无论如何您都会将其返回给调用者。