006
18.05.2016, 13:14 Uhr
ao
(Operator)
|
Zitat von ~Noby: |
mit sehr vielen Verzweigungen und ggf. sehr tief. Die Rekursion mit Baumstruktur habe ich bereits (stürzt nur gerade noch ab).
|
Bei Rekursion mit sehr großer Tiefe kann es passieren, dass dir der Speicher ausgeht (Stack overflow), besonders dann, wenn jeder rekursive Aufruf noch eine nennenswerte Menge lokaler Daten anlegt. Das kann die Ursache für den Absturz sein.
Es kann aber auch sein, dass du einem Pointer folgst, der ins Klo zeigt, zum Beispiel weil er nicht initialisiert wurde, oder weil er auf ein Objekt gebogen wurde, das nicht seinem Typ entspricht (falscher reinterpret_cast), oder weil das Objekt, auf das er mal gezeigt hat, inzwischen schon wieder weg ist. Beliebte Ursachen hierzu sind early deletions (ein mit new geholtes Objekt wurde mit delete zerlegt, aber es gibt noch weitere Zeiger, die darauf verweisen) und lokale Objekte innerhalb einer Funktion, deren Adresse nach draußen gereicht und irgendwo gespeichert wurde.
Sowas zu debuggen kann sehr mühsam sein. Es kann helfen, das Allozieren und das Verwenden der Speicherbereiche zu loggen und die entstandenen Logfiles zu vergleichen. Erschwerend kommt bei dieser Klasse von Fehlern hinzu, dass Code-Modifikationen dafür sorgen können, dass sich das Fehlerbild verändert (sogenannte "Heisenbugs"). Du bist nicht zu beneiden. Nimm es als Lektion in Phantasie und Ausdauer.
Zitat: |
Das ganze sollte jedoch schnell und sicher sein, deswegen die Frage nach Containern.
|
Dass rohe Zeiger tendenziell unsicher sind und ein Container bevorzugt werden sollte, steht meiner Meinung nach außer Zweifel. Zu der Frage, welcher Container: Siehe oben. Dieser Post wurde am 18.05.2016 um 13:27 Uhr von ao editiert. |