Инициализация BSTR для другого BSTR с использованием оператора присваивания

У меня есть код как

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 ответа

Да. BSTR может быть назначен другой переменной BSTR. BSTR фактически является начальным адресом фактических данных.

Проблема здесь заключается в функции RemoveHead(), а не в назначении. Пожалуйста, просмотрите полную трассировку стека или просто присоедините отладчик к вашей программе для дальнейшей отладки проблемы.

Поместите строку 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);
  }


}
Другие вопросы по тегам