2016-06-30 212 views
0

初始化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); 

} 

A碼和我不知道爲什麼應用程序崩潰了。 是否可以使用賦值運算符將BSTR初始化爲另一個BSTR? 任何人都可以幫我找出應用程序崩潰的原因嗎?

+1

'BSTR'只是'wchar_t *'的一個typedef。當然,你可以分配一個指向變量的指針。你的問題在於其他地方 - 最有可能的是,堆腐敗(某處,可能是一個完全不相關的代碼;堆腐敗是這樣討厭的)。 –

回答

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


} 
0

是內部的。 BSTR可以分配給另一個BSTR變量。 BSTR實際上是實際數據的起始地址。

這裏的問題是使用RemoveHead()函數而不是賦值。 請參閱完整的堆棧跟蹤或只需將調試器附加到您的程序以進一步調試問題。