char到wchar_t会导致堆损坏

时间:2013-08-23 10:49:52

标签: c malloc heap

我有以下代码

char *GetBytesString(char message[])
{
    wchar_t utf16_str;
    char *ptr;
    mbstowcs(&utf16_str, message, sizeof(message));
    ptr = (char *) malloc(sizeof(utf16_str) + 2);
    memcpy(ptr, &utf16_str, sizeof(utf16_str));
    return ptr;
}

每当我尝试调用它时,我都会收到错误消息,说明在utf16_str周围发生了堆损坏。我该怎么做才能解决它?

谢谢!

2 个答案:

答案 0 :(得分:4)

停止覆盖随机内存。

此:

wchar_t utf16_str;

仅为一个宽字符保留空间,然后将整个转换后的字符串写在其上。

您应首先执行malloc(),但需要使用strlen()来确定需要多少个字符。然后转换为已分配的缓冲区,并返回该缓冲区。

还有更多问题,例如sizeof message无法像您预期的那样发挥作用。

另外,please don't cast the return value of malloc() in C

答案 1 :(得分:1)

应该是wchar_t *utf16_str而不是wchar_t utf16_str。有关mbstowcs的msdn示例,请参阅link