ZBLOG

char* CPhotoDesignView::ConvertWCharToChar(const WCHAR* wcharStr) { int length = WideCharToMultiByte(CP_ACP, 0, wcharStr, -1, NULL, 0, NULL, NULL); if (length > 0) { CHAR* charStr = new CHAR[length]; WideCharToMultiByte(CP_ACP, 0, wcharStr,...

根据您提供的代码,我注意到 ConvertWCharToChar 函数中存在一些问题。在函数内部,您使用了 new 运算符为字符数组分配内存,并将其转换为 CHAR* 类型指针返回。然而,在 SplitChineseCharacters 函数中,您却错误地使用了 delete 运算符来释放这些指针。

为了解决这个问题,您可以对 ConvertWCharToChar 函数进行如下修改:

std::vector<std::unique_ptr<char[]>> CPhotoDesignView::SplitChineseCharacters(CString text)
{
    std::vector<std::unique_ptr<char[]>> arr;
    int len = text.GetLength();
    USES_CONVERSION;

    for (int i = 0; i < len; i++)
    {
        WCHAR ch = text.GetAt(i);

        if ((ch >= 0x4E00) && (ch <= 0x9FFF))
        {
            char* convertedChar = ConvertWCharToChar(&ch);
            arr.push_back(std::unique_ptr<char[]>(convertedChar));
        }
        else
        {
            // 处理非中文字符的逻辑
        }
    }

    return arr;
}

修改后的代码将会正确地使用 std::unique_ptr<char[]> 来管理已分配的字符数组,并确保在函数返回时自动释放它们。请记住,不再需要手动删除已经由智能指针管理的指针。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=3488

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?