Pointer auf Pointer lässt Programm abstürzen
-
Moin!
inzwischen bin ich total verzweifelt, ein hartnäckiger Fehler will einfach nicht weg. Es hängt an dieser Zeile:
double** a = new double*[d];d ist ein integer, ist positiv (einstellig).
Das Programm kompiliert, beim Ausführen kommt aber (unter Linux) der Fehler "corrupted double-linked list" und der Backtrace/Memory map.hat irgendjemand eine idee woran das liegen könnte? ich habe es zur Fehlersuche in zwei Zeilen geschrieben, der Fehler liegt rechts vom Gleichheitszeichen...
Wäre cool wenn jemand eine Idee hat.
gruß
-
Der Fehler lässt mich vermuten, dass der Fehler irgendwo anders liegt. Das gezeigte hat nämlich herzlich wenig mit einer doppelt verketteten Liste zu tun.
//Edit:
Ganz vergessen. Zeig doch mal den ganzen Code oder sonst probier ein kleines Beispiel zu machen, wo das gleiche passiert.
-
Ja, du schreibst irgendwo über Arraygrenzen hinweg.
Also erst mal mit _GLIBCXX_DEBUG kompilieren und die Debugversion durch valgrind laufen lassen.
-
hey!
danke für eure antworten.
ich habe vor und nach der Zeile mit cout was ausgeben lassen und das davor wurde noch angezeigt, das danach nicht mehr. deshalb dachte ich, dass der fehler dort liegt.vor der zeile kommt eigentlich wenig im programm, nur ein paar deklarationen und einfache for-schleifen.
ich werde mal den debugger verwenden und mich dann noch mal melden.
gruß
-
Das muss nicht sein, dass es dort liegen muss. Bei undefiniertem Verhalten kann es gut vorkommen, dass eine völlig andere Stelle den Fehler auslöst/verschwinden lässt.
hieristalex schrieb:
ich werde mal den debugger verwenden und mich dann noch mal melden.

Das nächste mal machst du das aber einfach zuerst.
-
Das nächste mal machst du das aber einfach zuerst.
Ja, werde ich tun. Sorry.
der Debugger bringt auch den Fehler an genau der gleichen Stelle. Das Komische ist, dass ich nirgends listen verwendet habe. Wenn ich den array (also d) kleiner mache, dann funktioniert es...
was wird denn noch als liste "interpretiert", d.h. was könnte noch diese Fehlermeldung bringen?
danke schonmal für eure Antworten.
gruß
-
Wie schon gesagt, du schreibst über Arraygrenzen hinweg oder hast sonstige ungültige Speicherzugriffe in deinem Programm. Damit überschreibst du auch Strukturen der Speicherverwaltung.
Hast du valgrind benutzt?
-
hallo,
hat alles nichts gebracht, ich habe den fehler nicht gefunden und es dann groß umgebaut. jetzt läuft es.
vielen dank noch mal an alle die geholfen haben.
gruß
-
Ich hoffe, das hat dich überzeugt, in Zukunft auf Arrays zu verzichten und konsequent vector einzusetzen. Damit hast du im Bedarfsfall eine absolut zuverlässige Erkennung von ungültigen Indexzugriffen ohne Extrakosten.
-
Nur weil es läuft heisst das noch lange nicht, dass der Fehler behoben ist! Ich würde es erst als behoben anschauen, wenn der Fehler lokalisiert, verstanden und entfernt wurde.