wxArray::Item(int) wird mit falschem wert aufgerufen
-
hallo,
ich bekomme einen crash in unregelmäßigen abständen. die fehlermeldung lautet:
Eine Ausnahme (erste Chance) bei 0x64810359 (ecwdaWin.dll) in ecInspector.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xdddddddd. Unbehandelte Ausnahme bei 0x76f015de (ntdll.dll) in ecInspector.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xdddddddd.
hier ist die simple funktion mit dem wert von idx:
http://www.gemini-sites.de/ItemError2.gifhier die aufrufliste mit dem falschen wert für Item:
http://www.gemini-sites.de/ItemError.gifwie passt das zusammen?
danke!
-
Size ist die Anzahl der Elemente im Array, aber kein Gültiger Index!
Da ein Array bei Index 0 anfängt...
-
danke für deine antwort. was ich vergessen habe zu schreiben: in dem quellcode im oberen der beiden links habe ich mit oldVal getestet, ob der index geändert wurde, und das ist nicht der fall. Size wird also nicht verwendet. Ein weiterer punkt ist, dass mir visual studio wie in der grafik zu sehen ist anzeigt, dass im moment der übergabe idx immernoch 270 ist, blos eben nach der übergabe nicht mehr.
ich denke mittlerweile, dass ein memory leak schuld sein könnte, das irgendwo anders im programm entsteht und erst hier durchschlägt. zumal der fehler auch nur selten und nach einem nicht vorhersehbarem muster auftritt.
-
Was soll eigentlich das this; am anfang der Methode bewirken?
Ansonsten sehe ich da nur den Fehler mit getSize.
-
Für mich sieht das so aus, als ob eines der beteiligten Objekte (möglicherweise aus einem anderen Thread heraus) zwischenzeitlich freigegeben worden wäre.
-
hi mfk,
interessante idee, aber ist das mit einem simplen int möglich? oder meinst du, mitten im zugriff auf das wxArray per getSamplesArr()->Item(int) ist das array dann gelöscht worden? ist das überhaupt möglich mitten im aufruf einer funktion? im programm bleibt das array eigentlich bis zum programmende durchweg bestehen.
-
uiIndex hat im letzten Stackframe den Wert DDDDDDDD. Mit diesem Wert markiert MSVC im Debug-Modus freigegebenen Heap-Speicher. Das sollte mit einem Parameter, der auf dem Stack liegt, nicht passieren.
Du wirst dir wohl irgendwann vorher den Speicher zerschossen haben. Da du es mit Array-Grenzen ja offenbar nicht so genau nimmst, solltest du mal gezielt nach solchen Fehlern suchen.
-
yup, den verdacht mit dem zerschossenen speicher hatte ich ja auch schon vorher erwähnt. gut, dass du mir da zustimmst.
an der arraygrenze liegt es nicht, die lag zum zeitpunkt des crashs bei 297. trotzdem habe ich natürlich den mittlerweile habe code auf idx = getSize() - 1; korrigiert. nur hat das halt definitiv nicht zum crash geführt.
mittlerweile habe ich auch einen memory leak gefunden und behoben und seitdem ist der crash auch noch nicht wieder aufgetreten.
danke für euren input!