Frage

CDirScan Funktion NextL wirft „Haupt Panik KERN-EXEC 0“, wenn es nicht sofort SetScanDataL () aufgerufen wird (das heißt, wenn es später im selben aktiven Objekt nach der anderen Ereignisse genannt wird)

f1 () - genannt im aktiven Objekt

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

f2 () - innerhalb des gleichen aktiven Objekts aufgerufen, nach einigem asynchronen Ereignisse

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

Wenn iDirScan-> NextL () vor warten auf einige asynchrone Ereignis aufgerufen wird, funktioniert alles einwandfrei.

Warum CDirScan Variable verliert seine Gültigkeit? Beachten Sie, dass das asynchrone Ereignis nichts zu tun hat, kann es ein einfacher Dummy-Timer sein.

War es hilfreich?

Lösung

Ich schrieb einigen Test-Code in einem Versuch, diese zu reproduzieren, konnte aber nicht.

Im Allgemeinen KERN-EXEC 0 panics werden am häufigsten durch veraltete R Objekt-Handles verursacht. stellen Sie sicher, zum Beispiel, dass die RFs Greifen Sie CDirScan passieren nicht zu früh geschlossen wird.

Andere Tipps

Könnten Sie mehr aus Ihrem Code schreiben zu analysieren?

Enthält diese beiden Teile des Codes sind in verschiedenen Funktionen f1, f2, oder beide sind in einer Funktion f1, das ist für mich nicht klar?

Auch wenn iDirScan Teil Ihrer Klasse ist, sollten Sie lassen es nicht auf Cleanup-Stack (NewLC) Funktion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top