我試圖反向工程並修復拋出未處理異常的Win32控制檯應用程序。爲什麼我的C++類變量意外地改變了範圍之外?
我有32個在線程中運行的類的實例。這些「服務」線程應該每個定期創建/刪除一個唯一的CMessage實例,並且這些CMessage對象中的每一個都在Service類中聲明爲私有。
當我運行在調試器中的應用程序(我使用Visual Studio 2005)爲的CMessage監視窗口指示被調用的CMessage成員函數權前的CMessage的地址更改爲00000000 - 異常的原因。
有,我可以看到爲什麼發生這種情況沒有直接的解釋。在上一行代碼和這一行之間似乎沒有什麼不愉快的事情發生,所以我懷疑在某些情況下每個線程都錯誤地從其他線程之一引用CMessage對象(就像在線程生命週期中的某個時刻CMessage該線程的對象被刪除)。
我的問題是:什麼是要確保這些的CMessage對象absoloutely線程安全的,不能修改/從任何地方刪除,除了當前類範圍的最佳方式?我認爲這是私人的原因,但我現在還不完全確定。有一件事我想過做指的是物體的CMessage如下:
this->myCMessage;
,而不是隻:
myCMessage;
請問這有什麼區別?
不是。更可能的是您正在調用某個不是線程安全的函數。 – stark