Uitzonderingsfout c0000005 in VC++

Ik werk aan de VC++ Console-applicatie.

Deze applicatie verzendt gedurende een bepaalde periode een bestand vanuit de Appdata\Roaming-map.

Wat er gebeurt, is dat ik deze crashfout krijg:

Problem signature:
Problem Event Name: APPCRASH
Application Name:   App.exe
Application Version:    1.0.0.2
Application Timestamp:  51c02fa8
Fault Module Name:  PCMeter.exe
Fault Module Version:   1.0.0.2
Fault Module Timestamp: 51c02fa8
Exception Code: c0000005
Exception Offset:   000069eb
OS Version: 6.1.7601.2.1.0.256.48
Locale ID:  1033
Additional Information 1:   0a9e
Additional Information 2:   0a9e372d3b4ad19135b953a78882e789
Additional Information 3:   0a9e
Additional Information 4:   0a9e372d3b4ad19135b953a78882e789

Kan iemand me alsjeblieft helpen dit probleem op te lossen


Antwoord 1, autoriteit 100%

Uitzonderingscode c0000005 is de code voor een toegangsovertreding. Dat betekent dat uw programma een geheugenadres benadert (ofwel leest of schrijft) waarvoor het geen rechten heeft. Meestal wordt dit veroorzaakt door:

  • Toegang tot een verouderde aanwijzer. Dat is toegang krijgen tot geheugen waarvan de toewijzing al is opgeheven. Merk op dat dergelijke verouderde aanwijzertoegangen niet altijd leiden tot toegangsschendingen. Alleen als de geheugenbeheerder het geheugen aan het systeem heeft teruggegeven, krijg je een toegangsfout.
  • Het einde van een array aflezen. Dit is wanneer je een array met lengte N hebt en je opent elementen met index >=N.

Om het probleem op te lossen, moet je wat debuggen. Als u niet in staat bent om de fout onder uw debugger op uw ontwikkelmachine te laten optreden, moet u een crashdumpbestand ophalen en in uw debugger laden. Hiermee kunt u zien waar in de code het probleem zich heeft voorgedaan en u hopelijk naar de oplossing leiden. U moet de foutopsporingssymbolen hebben die aan het uitvoerbare bestand zijn gekoppeld om zinvolle stacktraces te zien.


Antwoord 2

Ik had hetzelfde probleem tijdens het uitvoeren van bulktests voor een opdracht. Toen ik enkele iostream-bewerkingen (afdrukken naar console) van de klassenconstructor naar een methode in de klas verplaatste, bleek het opgelost.

Ik neem aan dat het iets te maken had met iostream-manipulaties in de constructor.

Hier is de oplossing:

// Before
CommandPrompt::CommandPrompt() : afs(nullptr), aff(nullptr) {
    cout << "Some text I was printing.." << endl;
};
// After
CommandPrompt::CommandPrompt() : afs(nullptr), aff(nullptr) {
};

Voel je vrij om meer uit te leggen wat de fout is achter de schermen, aangezien het mijn cpp-kennis te boven gaat.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes