這是我面臨的某種異常死鎖嗎?如何避免它?C + + Builder 2010異常死鎖?
看看下面的代碼行,我將TIdContext對象存儲在一個objlist中,有時我需要處理它。但是,如果一個用戶斷開連接,而另一個線程正在處理列表,那麼爲了釋放TIdContext-> Data對象,我得到了Access voilation,好吧,它很好,我正在使用try/catch,但問題是,在下面的行有某種死鎖和進程掛起,如果我附加一個debuger它顯示訪問voilation再次,再次和cpu coonsumption由於異常死鎖上升。
AnsiString UserID = ((Tmyobject*) ((TIdContext*) ObjList->Objects[i])->Data)->UserID;
我知道我可以訪問對象前檢查,如果對象是不爲空,它的工作原理。但我的問題是什麼,如果一旦在一個藍色的月亮數據對象是在點時釋放NULL檢查執行,並在下一行時,當我再次訪問該對象我得到相同的死鎖?
那麼如何避免/處理這個死鎖異常呢?
這裏是調用堆棧...
:005F07C0 System::AnsiStringBase::AnsiStringBase(this=:0285FCE0, src=????)
:0040223F System::AnsiStringT<0>::AnsiStringT<0>(this=:0285FCE0, src=:00000008)
:00457996 TSomeClass::SomeFunction(this=:009D8230, UserID={ }, DataSize={ },)
:0047BFF1 __linkproc__ ThreadProc(Thread=:009561C0)
:004AD00E __linkproc__ ThreadWrapper(Parameter=:009EAA30)
:7c80b729 ; C:\WINDOWS\system32\kernel32.dll
請helppppppppppppppppppppp
感謝
C++ Builder是邪惡的!對不起,我只是說:]。 – pajton 2010-03-21 00:06:22
順便說一句,try/catch's用於捕獲C++異常,而不是訪問衝突。 – 2010-03-21 11:52:39