做蓝牙开发时,遇到这个问题,困扰了好久,这个问题是随机出现的。
搜索某个设备的服务时,需创建一个CSdpAgent对象:CSdpAgent::NewL( MSdpAgentNotifier&, TBTDevAddr );
先前的做法是创建前判断
if(iAgent != NULL)
{
iAgent->Cancel();
delete iAgent;
iAgent=NULL;
}
并且每次出错,也是在这个地方,我猜测是,iAgent->Cancel()后,可能还在查找服务,delete时就出现了 kern-exec3,后来改为下面的方式就没问题了:
RPointerArray<CSdpAgent> iAgents;
CSdpAgent* agent = CSdpAgent::NewLC( *this, iDevData->iDeviceAddr );
iAgents.Append(agent);
查找完 iAgents.ResetAndDestroy();