002
02.04.2013, 13:19 Uhr
ao
(Operator)
|
Auf den ersten Blick scheint es so, dass du versuchst, einen Block mit delete freizugeben, der nicht mit new angefordert wurde. Oder du versuchst, ihn ein zweites Mal freizugeben.
Auf den zweiten Blick kann es auch sein, dass du (durch einen Programmierfehler an ganz anderer Stelle) die Verwaltungsdaten des Heap zerstört hast, so dass das (eigentlich korrekte) Freigeben des Blocks fehlschlägt, weil in den Bytes drumherum nicht mehr das Richtige steht.
Wie kann das passieren? Eigentlich hast du auf diese Verwaltungsbytes gar keinen regulären Zugriff. Das Kaputtschreiben passiert oft dadurch, dass du über Arraygrenzen hinausschreibst. Das muss nicht in jedem Fall sofort mit einer "Access Violation"-Exception bestraft werden und kann auch erst mal eine Weile unentdeckt bleiben.
Auf jeden Fall musst du solche Fehler finden, denn wenn sie unentdeckt bleiben, können sie fiese Folgen haben. Ein Programmabsturz ist da noch ein relativ kleines Übel. "Tröste" dich nicht damit, dass ja die Berechnung stimmt. Von einem "eigentlich korrekten" Programm kann hier keine Rede sein Dieser Post wurde am 02.04.2013 um 13:20 Uhr von ao editiert. |