使用赋值运算符将 BSTR 初始化为另一个 BSTR
Posted
技术标签:
【中文标题】使用赋值运算符将 BSTR 初始化为另一个 BSTR【英文标题】:Initializing a BSTR to another BSTR using assignment operator 【发布时间】:2016-11-02 12:11:54 【问题描述】:我有一个类似的代码-
void CSomeClass::Remove()
BSTR tempStr = NULL;
while(!m_list.IsEmpty()) //m_list is a CSomeClass member of type CList<BSTR, BSTR>
tempStr = m_list.RemoveHead(); //application crash here!!
if(NULL==tempStr)
continue;
SysFreeString(tempStr);
我不确定应用程序为什么会崩溃。 是否可以? 谁能帮我找出应用程序崩溃的原因?
【问题讨论】:
BSTR
只是wchar_t*
的类型定义。是的,当然您可以将指针分配给变量。您的问题出在其他地方 - 很可能是堆损坏(某处,可能在一段完全不相关的代码中;堆损坏在这种情况下令人讨厌)。
【参考方案1】:
是的。 BSTR 可以分配给另一个 BSTR 变量。 BSTR其实是实际数据的起始地址。
这里的问题在于 RemoveHead() 函数而不是赋值。 请查看完整的堆栈跟踪或仅将调试器附加到您的程序以进一步调试问题。
【讨论】:
【参考方案2】:将 SysFreeString 放入循环中
void CSomeClass::Remove()
BSTR tempStr = NULL;
while(!m_list.IsEmpty()) //m_list is a CSomeClass member of type CList<BSTR, BSTR>
tempStr = m_list.RemoveHead(); //application crash here!!
if(NULL==tempStr)
continue;
SysFreeString(tempStr);
【讨论】:
以上是关于使用赋值运算符将 BSTR 初始化为另一个 BSTR的主要内容,如果未能解决你的问题,请参考以下文章