这是我面临的某种异常死锁吗?如何避免它?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