C++ CDirScan函数NextL引发KERN-EXEC 0

C++ CDirScan函数NextL引发KERN-EXEC 0,c++,mobile,symbian,s60,C++,Mobile,Symbian,S60,如果未立即调用CDirScan函数NextL,则会引发“Main Panic KERN-EXEC 0”(即,如果稍后在另一个事件后在同一活动对象内调用该函数) f1()-在活动对象内调用 iDirScan = CDirScan::NewLC(aFs); iDirScan->SetScanDataL(aPath, KEntryAttDir|KEntryAttMatchExclusive, ESortNone, CDirScan::EScanDownTree); //wai

如果未立即调用CDirScan函数NextL,则会引发“Main Panic KERN-EXEC 0”(即,如果稍后在另一个事件后在同一活动对象内调用该函数)

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变量会失去其有效性?请注意,异步事件与此无关,它可以是一个简单的虚拟计时器

我编写了一些测试代码,试图重现这一点,但没有成功


通常,
KERN-EXEC 0
恐慌通常是由过时的R对象句柄引起的。例如,确保传递给
CDirScan
RFs
句柄没有过早关闭。

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

这两部分代码是在不同的函数f1,f2中,还是都在一个函数f1中,我不清楚


此外,如果iDirScan是类的一部分,则不应将其保留在清理堆栈(NewLC)函数上。

绝对正确。谢谢你,拉阿尔托。我不小心破坏了f1中的RFs会话。这就是我的代码不起作用的原因。