2016-07-18 6 views
1

Ich habe ein paar Änderungen an einem Programm, das viele vector :: resize, vector :: reserve und memcopy-Operationen verwendet, um einen Puffer zum Lesen von Daten aus Dateien zu manipulieren. Ich habe meine Komponententests unter Linux durchgeführt und sie haben mit Bravour bestanden, aber als ich dieselben Tests auf einer Windows-Maschine durchführte, sehe ich eine memory access violation occurred at address 0x0038e000, while attempting to read inaccessible data.Wie Windows-spezifische Speicherprobleme in C++ zu diagnostizieren

Ich habe einige Ratschläge gelesen, die ich online las und Valgrind gegen mein Programm in einem Versuch, Speicherlecks/Probleme zu erkennen, jedoch kam es zurück mit "Alle Heap-Blöcke wurden freigegeben, keine Lecks sind möglich".

Gibt es noch weitere Ratschläge, wie Sie die Ursache von Speicherfehlern in Windows ermitteln können?

Danke!

+1

Sie brauchen nicht valgrind. Sie brauchen nur einen Debugger. Finde heraus, welche Codezeile diesen Fehler verursacht und arbeite von hier aus. –

+0

Wird unter dem Debugger ausgeführt, wenn die Programmfehler die Aufrufhistorie/Stack-Frames überprüfen. –

+0

Versuchen Sie, das Programm mit [Adressen-Sanitizer] (http://clang.llvm.org/docs/AddressSanitizer.html) zu erstellen –

Antwort

2

Versuchen Sie die ganze Seite Haufen, es hat mir viele Male geholfen.

https://msdn.microsoft.com/en-us/library/windows/hardware/ff549561(v=vs.85).aspx

+0

This. Windows kommt mit einigen erstaunlichen Debugging-Fähigkeiten, wenn Sie wissen, wie man sie benutzt. Glücklicherweise hat Microsoft Press das Buch _Inside Windows Debugging_ von Tarik Soulami veröffentlicht, das eine praktische Einführung in einige der wichtigsten Tools bietet. – ComicSansMS