Was tun bei Segmentation Error?

Mein C++ Parser arbeitet mit recht vielen arrays. Bei deren Belegung bleibt das ganze Programm an einem Punkt stehen, wo es die arrays mit den geparsten Werten belegen soll, da dabei anscheinend irgendwelche Speicherzugriffsfehler auftreten. Die Ausgabe des Debuggers von kdevelop ist „gdb-Meldung: Program received signal SIGSEGV, Segmentation fault.“ Der Punkt an dem das ganze stehenbleibt häng auch mit den vorher angelegten Variablen zusammen. Je weniger ich vorher anlege (oder wenn ich z.B. short int statt int nehme) wird das array weiter belegt als wenn ich vorher mehr Speicher verbrauche.

Bei meinem Parser ist es nörig, in einer Schleife Charakters aus einem Filestream zu lesen und in ein recht großes (ca 400 strings) string-Array zu schreiben. Ich lösche das Buffer-Array, in dem die charakters eingelesen werden schon am ende jedes Schleifendurchlaufs, um den Speicher freizugeben, aber das bringt gar nix…

Was kann ich denn tun? Anscheinend läuft da irgendwas bei der Speichervergabe falsch, aber wie kann ich das beeinflussen?

Danke schonmal für eure Anworten!!!

Hi Nils!

Ich weiß ja nicht, ob das dein Problem löst, aber ich würde für die Strings std::string nehmen und für die Arrays std::vector. Wenn deine Anwendung an diesem Punkt nicht absolut zeitkritisch ist, hätte das den Vorteil, daß du dir das meiste Speichermanagement sparen kannst, und wenn du auf einen Index im std::vector zugreifst, den es nicht gibt, wirft die STL eine Exception und du weißt sofort Bescheid.

Ansonsten würde ich hingehen und mir ein Beispiel greifen, das ich auf auf Papier durchführen kann, und dann das Programm durchgehen, ob es alles so macht, wie ich es gemeint habe.

Sinnvollste Möglichkeit: Memory Profiler und Leak-Detektor besorgen. Mein Tip: Demo-Version von IBM Rational Purify. Wenn du professionell programmierst, solltet ihr das sowieso im Haus haben.

Dritte Möglichkeit: Compiliere mit der Option --do_what_i_meant_not_what_i_said, dann wird’s auch laufen, vermute ich! *gg*

Chris