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?1Ich 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.