2015-11-02 54 views
0

我很困惑,爲什麼我得到這個錯誤。代碼如下。我發現了錯誤,在這條線,「如果(pLib-> m_fAbortThread)」運行時檢查失敗#3 - 變量'pLib'正在被使用而未被初始化

UINT CLibary:: WorkerThread(LPVOID pArgs) 
{ 
    CLibrary *pLib = CLibrary::GetInstance(); 
    if (!pLib ) 
    { 
     return ED_NOLIBOBJECT; 
    } 

    while (1) 
    { 
     if (pLib->m_fAbortThread) 
     { 
      //Do Something here 
     } 
    } 

    return 0; 
} 
+0

使用臨界區保護'm_fAbortThread'嗎? –

+0

@AndrewKomiagin不,不是。 – user2832424

+0

使用'CEvent :: SetEvent()'和'WaitForSingleObject'來代替布爾標誌來告訴線程退出。 –

回答

0

安德魯的意見(雖然100%正確的)不解釋這個「運行時檢查失敗#3」。

當此檢查啓用時,編譯器在堆棧中保留一些內存以跟蹤局部變量的初始化。它實際上將0寫入到與序言中的某個變量相對應的字節中,並且當該變量被賦予某個值時將其寫入1中。

然後,運行時檢查將該值與0進行比較,如果是,則發出警報(call __RTC_UninitUse)。

因此,如果檢查失敗,則需要將0寫入函數堆棧。這樣做的代碼顯然不會在您的問題中發佈。

相關問題