gpt4 book ai didi

com - 将 CComBSTR 转换为 _bstr_t,fcopy 为 false

转载 作者:行者123 更新时间:2023-12-01 22:19:41 25 4
gpt4 key购买 nike

我认为以下原因会导致内存访问冲突错误,因为错误参数 (fcopy) 会导致为 CComBSTR 释放内存:

CComBSTR myCComBSTR;
string strMyCComBSTR = string(_bstr_t(myCComBSTR, false));

但是,我不太确定为什么会这样,因为 MSDN 文档对 fcopy 的描述如下:

If false, the bstr argument is attached to the new object without making a copy by calling SysAllocString.

我的问题是:

  1. 我说这是个问题对吗
  2. 如果是 - 为什么?

谢谢

最佳答案

是的,这是一个问题 - myCComBSTR 和临时文件都会尝试释放该字符串,因为他们都认为他们拥有它。

你看,fcopy 的值为 false 意味着“请不要复制字符串主体,只需附加到我给你的主体”。当第一行完成时,你有 myCComBSTR 拥有字符串缓冲区,当第二行的临时对象被创建时,它也拥有相同的字符串缓冲区,因为 fcopy错误。然后临时对象被销毁并释放字符串缓冲区。稍后 myCComBSTR 将被销毁并尝试再次释放相同的字符串缓冲区 - 你会遇到所谓的 double free 这会导致未定义的行为。

关于com - 将 CComBSTR 转换为 _bstr_t,fcopy 为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3404541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com