使用赋值运算符将BSTR初始化为另一个BSTR

时间:2016-06-30 11:56:45

标签: com atl bstr clist

我有一个代码 -

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? 任何人都可以帮我找出应用程序崩溃的原因吗?

2 个答案:

答案 0 :(得分:0)

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

这里的问题是使用RemoveHead()函数而不是赋值。 请查看完整的堆栈跟踪,或者只是将调试器附加到程序中以进一步调试问题。

答案 1 :(得分:-1)

将SysFreeString放入循环

output = sum(int(lst[4]) for lst in THELIST)