CDirScan函数NextL引发KERN-EXEC 0

时间:2009-12-07 02:26:16

标签: c++ mobile symbian s60

CDirScan函数NextL引发“主要恐慌KERN-EXEC 0”如果没有立即调用SetScanDataL()(即如果稍后在同一个活动对象中调用它)

f1() - 在活动对象中调用

iDirScan = CDirScan::NewLC(aFs);
iDirScan->SetScanDataL(aPath, 
    KEntryAttDir|KEntryAttMatchExclusive, 
    ESortNone, CDirScan::EScanDownTree);
//wait for some asynchronous event

f2() - 在一些异步事件之后在同一个活动对象中调用

CDir* dir = NULL;
TRAPD(error, iDirScan->NextL(dir)); -->> "Main Panic KERN-EXEC 0"

如果在等待某个异步事件之前调用iDirScan-> NextL(),一切正常。

为什么CDirScan变量会失去其有效性?请注意,异步事件无关,它可以是一个简单的虚拟计时器。

2 个答案:

答案 0 :(得分:2)

我写了一些测试代码,试图重现这个但却不能。

通常,KERN-EXEC 0恐慌通常是由陈旧的R对象句柄引起的。例如,请确保您传递给RFs的{​​{1}}句柄未过早关闭。

答案 1 :(得分:0)

您可以发布更多代码进行分析吗?

这两部分代码是否在不同的函数f1,f2或两者都在一个函数f1中,这对我来说不是很清楚?

此外,如果iDirScan是您班级的一部分,则不应将其留在清理堆栈(NewLC)功能中。