0

我有一个代码,例如-

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?谁能帮我找出应用程序崩溃的原因?

4

2 回答 2

0

是的。BSTR 可以分配给另一个 BSTR 变量。BSTR 实际上是实际数据的起始地址。

这里的问题在于 RemoveHead() 函数而不是分配。请查看完整的堆栈跟踪或仅将调试器附加到您的程序以进一步调试问题。

于 2018-02-22T09:38:43.457 回答
-1

将 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);
  }


}
于 2016-06-30T20:53:16.330 回答