Zugriffsverletzung beim Schreiben



  • Hallo zusammen,

    ich bin noch relativ neu in C++ und muss nun eine Schnittstelle für
    SFML und Box2D schreiben, was auch ganz gut klappt.
    Ein Problem habe ich nur beim builden. Wenn ich das Programm auf meinem Windows 7 x64 System builde funktioniert alles. Wenn ich den Build jedoch auf meinem Windowx XP x32 System ausführe tritt bei der Programmausführung folgender Fehler auf:

    Unbehandelte Win32-Ausnahme in SFML-Box2D.exe [3676]
    Unbehandelte Ausnahme bei 0x004410f9 in SFML-Box2D.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x002318c0.

    Auf einem weiteren Windows 7 x32 System klappt auch alles wunderbar.
    Als Compiler kommt jeweils MinGW 5.1.6 zum Einsatz.

    Kann mir da jemand weiterhelfen?

    Gruß,
    he_re1287



  • Starte es mit nem Debugger angehängt und erstell ein Crash Dump bzw Debug es mit den Windows Debugging tools

    Nur mit den Informationen die du uns gegeben hast kann man nicht sagen woran es liegt.

    Und ich nehme mal an dass das program etwas größer ist.



  • Noch ist das Programm nicht so groß, bin noch relativ am Anfang.

    Ich hab das Programm jetzt mal mit den Windows Debugging Tools ausgeführt,
    hier die Ausgabe bis zum Fehler:

    --------------------------------------------------------------------------
    CommandLine: "E:\Eclipse C++ Workspace\SFML-Box2D\Debug\SFML-Box2D.exe"
    Symbol search path is: SRV*DownstreamStore*http://msdl.microsoft.com/download/symbols
    Executable search path is:
    ModLoad: 00400000 006df000 image00400000
    ModLoad: 7c910000 7c9c9000 ntdll.dll
    ModLoad: 7c800000 7c908000 C:\WINDOWS\system32\kernel32.dll
    ModLoad: 77be0000 77c38000 C:\WINDOWS\system32\msvcrt.dll
    ModLoad: 10000000 101a5000 E:\Eclipse C++ Workspace\SFML-Box2D\Debug\sfml-graphics.dll
    ModLoad: 00730000 00784000 E:\Eclipse C++ Workspace\SFML-Box2D\Debug\sfml-system.dll
    ModLoad: 00790000 007e7000 E:\Eclipse C++ Workspace\SFML-Box2D\Debug\sfml-window.dll
    ModLoad: 77ef0000 77f39000 C:\WINDOWS\system32\GDI32.dll
    ModLoad: 7e360000 7e3f1000 C:\WINDOWS\system32\USER32.dll
    ModLoad: 5f0d0000 5f19c000 C:\WINDOWS\system32\OPENGL32.DLL
    ModLoad: 77da0000 77e4a000 C:\WINDOWS\system32\ADVAPI32.dll
    ModLoad: 77e50000 77ee2000 C:\WINDOWS\system32\RPCRT4.dll
    ModLoad: 77fc0000 77fd1000 C:\WINDOWS\system32\Secur32.dll
    ModLoad: 68fc0000 68fe0000 C:\WINDOWS\system32\GLU32.dll
    ModLoad: 736d0000 7371b000 C:\WINDOWS\system32\DDRAW.dll
    ModLoad: 73b30000 73b36000 C:\WINDOWS\system32\DCIMAN32.dll
    ModLoad: 76af0000 76b1e000 C:\WINDOWS\system32\WINMM.DLL
    (8b4.b84): Break instruction exception - code 80000003 (first chance)
    eax=00341eb4 ebx=7ffdf000 ecx=00000003 edx=00000008 esi=00341f48 edi=00341eb4
    eip=7c91120e esp=0022fb20 ebp=0022fc94 iopl=0 nv up ei pl nz na po nc
    cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
    ntdll!DbgBreakPoint:
    7c91120e cc int 3
    0:000> g
    ModLoad: 76330000 7634d000 C:\WINDOWS\system32\IMM32.DLL
    ModLoad: 5b0f0000 5b128000 C:\WINDOWS\system32\uxtheme.dll
    ModLoad: 63000000 63013000 C:\WINDOWS\system32\SynTPFcs.dll
    ModLoad: 77bd0000 77bd8000 C:\WINDOWS\system32\VERSION.dll
    ModLoad: 75250000 7527e000 C:\WINDOWS\system32\msctfime.ime
    ModLoad: 774b0000 775ed000 C:\WINDOWS\system32\ole32.dll
    ModLoad: 69000000 694b1000 C:\WINDOWS\system32\atioglxx.dll
    ModLoad: 62220000 62226000 C:\WINDOWS\system32\MCD32.DLL
    ModLoad: 72210000 7223b000 C:\WINDOWS\system32\DINPUT.DLL
    ModLoad: 68d90000 68d99000 C:\WINDOWS\system32\HID.DLL
    ModLoad: 778f0000 779e4000 C:\WINDOWS\system32\SETUPAPI.DLL
    ModLoad: 76bf0000 76c1e000 C:\WINDOWS\system32\WINTRUST.dll
    ModLoad: 77a50000 77ae6000 C:\WINDOWS\system32\CRYPT32.dll
    ModLoad: 77af0000 77b02000 C:\WINDOWS\system32\MSASN1.dll
    ModLoad: 76c50000 76c78000 C:\WINDOWS\system32\IMAGEHLP.dll
    (8b4.b84): Access violation - code c0000005 (first chance)
    First chance exceptions are reported before any exception handling.
    This exception may be expected and handled.
    eax=0022f960 ebx=7ffdf000 ecx=00000000 edx=0022f960 esi=00e7f796 edi=00e7f6f2
    eip=004410f9 esp=0022f600 ebp=0022f618 iopl=0 nv up ei pl zr na pe nc
    cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246
    *** ERROR: Module load completed but symbols could not be loaded for image00400000
    image00400000+0x410f9:
    004410f9 c780601f000000000000 mov dword ptr [eax+1F60h],0 ds:0023:002318c0=00000000
    0:000> g
    (8b4.b84): Access violation - code c0000005 (!!! second chance !!!)
    eax=0022f960 ebx=7ffdf000 ecx=00000000 edx=0022f960 esi=00e7f796 edi=00e7f6f2
    eip=004410f9 esp=0022f600 ebp=0022f618 iopl=0 nv up ei pl zr na pe nc
    cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
    image00400000+0x410f9:
    004410f9 c780601f000000000000 mov dword ptr [eax+1F60h],0 ds:0023:002318c0=00000000


  • Administrator

    http://de.wikipedia.org/wiki/Debugger

    Mit einem Debugger kannst du Schritt für Schritt durch dein Programm gehen und bei jedem Halt immer alle Variablen anschauen und überprüfen. So kannst du genau feststellen, wieso etwas nicht so läuft, wie es zu laufen hätte. Also das ist eine Arbeit, welche vollständig bei dir liegt und nicht von uns dann irgendwie ausgewertet werden muss. Informier dich mal ein wenig dazu, ist sehr nützlich!

    Grüssli



  • Ich werde mich in den nächsten Tagen mal konkret mit Debugging beschäftigen,
    wenn ich etwas mehr Zeit dazu habe.

    Ich habe jetzt nochmal das Programm auf ein absolutes Minimum
    reduziert und habe jetzt nur noch die main-Methode, in der nur ein
    Objekt einer einer externen Library instanziiert wird.
    Auch hier erscheint der Fehler. Ich habe mir den Konstruktor mal angeschaut,
    es werden nur zwei Variablen gesetzt, mehr passiert nicht!

    Zunächst werde ich nun erstmal MemTest über Nacht ausführen, um zu gucken ob
    vlt. irgendwas mit meinem Speicher nicht stimmt!



  • Vielleicht ist das ein SFML bug und nur wenige, vorallem nicht reproduzierbare crashes haben was mit Hardware Problemen zu tun.



  • Also SFML würde ich ausschließen, das Objekt das ich instanziiere
    stammt aus der Physikengine Box2D, dann evtl. davon. Aber in dem Konstruktor
    basiert auch nicht sonderlich viel, es werden nur zwei Variablen gesetzt.
    Eine int-Variable und eine type-Variable.


  • Administrator

    @he_re1287,
    Wenn du ein so kurzes kleines Programm erstellen kannst, wo der Fehler noch auftritt, dann zeig uns dies mal. SFML habe ich zum Beispiel auf der Platte und habe auch ein Win7 x64. Dann kann ich mal schauen, ob das bei mir auch nicht geht, vielleicht sogar selber den Fehler finden.

    Diese Art der Hilfe steht auch hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-200753.html

    Reduziere Codebeispiele auf das Wesentliche. Niemand wird sich 300 Zeilen Code durchlesen, wenn du dein Problem eigentlich auch an 20 Zeilen deutlich machen könntest. Und je weniger du den Leuten zumutest desto wahrscheinlicher ist es, dass sie es sich durchlesen (und evtl. eine Antwort haben). Am Sinnvollsten ist es, den vorhandenen Code zu nehmen und Stück für Stück in eine neue Sourcecode-Datei zu kopieren, so dass er möglichst kurz bleibt und dennoch den Fehler beinhaltet. Häufig stolpert man beim Erstellen dieses minimalen Codebeispiels selbst über die Fehlerursache.

    Edit: Ups, ein wenig zu spät. Box2D habe ich nicht, aber vielleicht jemand anderes 😉

    Grüssli



  • Also ich hab es mittlerweile hinbekommen, auch wenn ich es nicht so ganz verstehe.
    Ich hab einfach mal das Projekt von der Festplatte gelöscht und neu ausgecheckt, jetzt funktioniert ist.
    Sehr simpel und ein bisschen mysteriös...


Anmelden zum Antworten