char 到 wchar_t 导致堆损坏

标签 c malloc heap-memory

我有以下代码

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 周围发生了堆损坏。我该怎么做才能修复它?

谢谢!

最佳答案

停止覆盖随机内存。

这个:

wchar_t utf16_str;

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

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

还有更多问题,例如 sizeof message 没有像您预期的那样工作。

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

关于char 到 wchar_t 导致堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18400996/

相关文章:

c - 用 C 将数组写入文件,文件应采用人类可读格式

c - 为什么在 C 中,像下面代码中提到的警告行会采用下一行的字符串并打印?

c - 如何更改 GNU Enscript 中的语法高亮颜色?

添加到队列时在 C 和 Malloc 中创建队列

c++ - 如何故意泄漏非指针堆分配的对象

java - 如何在 Docker 容器中设置 Java 堆大小(Xms/Xmx)?

c - 结构指针在两个不同的函数中表现不同,不知道为什么

c - 在 C 中多次释放分配的 char*

java - 为什么 PermGen 的默认大小这么小?

c - 分配了一些内存后,我无法计算出我分配的内存的正确大小。我不知道为什么