我认为以下原因导致内存访问冲突错误,因为false参数(fcopy)导致为CComBSTR释放内存:
CComBSTR myCComBSTR;
string strMyCComBSTR = string(_bstr_t(myCComBSTR, false));
但是,我不太确定为什么这是因为MSDN文档中有关于fcopy的以下内容:
如果为false,则bstr参数为 附加到新对象没有 通过电话复制 SysAllocString。
我的问题是:
由于
答案 0 :(得分:2)
是的,这是一个问题 - myCComBSTR
和临时版都会尝试释放字符串,因为他们都认为他们拥有它。
你看,fcopy
的价值为false
意味着“请不要复制字体,只要贴在我给你的身上”。当第一行完成时,您拥有myCComBSTR
拥有字符串缓冲区,并且当创建第二行上的临时对象时,由于fcopy
为false
,它还拥有相同字符串缓冲区的所有权。然后临时被销毁并释放字符串缓冲区。稍后myCComBSTR
将被销毁,并将尝试再次释放相同的字符串缓冲区 - 您遇到所谓的 double free ,这会导致未定义的行为。