Komischer Crash in VS2013



  • Hallo,

    ich bekomme sporadisch folgende Excpetion, wenn ich meine Windowsapplikation laufen lasse:
    Exception thrown at 0x000000013F9FC9CA in MidiHumanizerStandAlone.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

    Exceptions kenne ich. Aber diese ist irgendwie anders. Hier ist der zugehörige Code dazu:

    ...
            if(notesByTrigger[i].size() > 0)
                chordTimes.add(notesByTrigger[i].getFirst().message->getTimeStamp());
    ...
    

    Der Crash passiert in der getTimeStamp() Funktion.
    Das merkwürdige ist: Ich habe mit dem "Immediate" Window einmal nachgeschaut, was für einen Wert notesByTrigger[i].size() hat. Der Wert ist 0!
    Aber bei einem Wert von 0 müsste die If-Abfrage greifen und die Funktion getTimeStamp() gar nicht erst aufrufen! **Aber anscheinend wird die If-Abfrage hier misachtet?
    **

    Wie kann das sein?

    Hier nochmal ein Screenshot von der Exception:
    http://i.imgur.com/RhlcVvw.png?1

    Ich verwende Visual Studio 2013 Express, momentan im Debug Mode. Der Crash kommt aber auch mit VS 2015 Express.
    Betriebssystem ist Windows 7 64-Bit.



  • Ich würde sagen: Race condition. Das poppen von notesByTrigger sollte eine critical section sein.



  • Ah, du meinst, dass ein paralleleler Thread das Array auf 0 setzt, ganz kurz nachdem die If-Abfrage durch ist?!

    Hmm.... daran hatte ich nicht gedacht. Könnte in der Tat sein 🙂 Muss gleich mal meinen Code anschauen!



  • Alatar schrieb:

    Ah, du meinst, dass ein paralleleler Thread das Array auf 0 setzt, ganz kurz nachdem die If-Abfrage durch ist?!

    Exakt.



  • 0xFFFFFFFFFFFFFFFF klingt für mich nach einem Array Subscript an Position -1.

    Aber prinzipiell ist das Kaffeesatzleserei, weil die zur Verfügung stehenden Informationen für eine fundierte Antwort bei weitem nicht ausreichen.



  • Es war wirklich eine Race Condition.
    Habe das Array "notesByTrigger" inzwischen abgesichert, so dass nur immer ein Thread daraufz zugreifen kann.
    Seitdem ist das Problem nicht mehr aufgetreten.

    Danke nochmal an Tim.


Anmelden zum Antworten