Programm stürtzt ab ?!

  • Hallo Leute,

    Bin neu hier und komme direkt mit einem Problem was mich nun schon lange genug quält. Ich muss für die Uni ein Programm schreiben welches das bekannte n-Damen Problem lösen kann.

    Ich habe es soweit geschrieben dass es funktioniert, ich habe ein paar Lösungen verglichen und es kommt das richtige dabei raus.

    Es funktioniert bis zu einer Feldgröße von 15x15. Sobald ich aber eine Feldgröße von 16x16 eingebe stürzt es ab und ich kann nicht nachvollziehen warum.

    Ich hoffe es kann mir jmd hier weiterhelfen weil ich es unbedingt fertig bringen will.

    Danke schon mal

    Gruß

  • Ohne mir dein Programm näher angesehen zu haben, hab ich's mit gcc mit "-g" kompiliert, damit Debug-Informationen für GDB in der ausführbaren Datei gespeichert werden. Dann hab ich's in GDB ausgeführt und mir nach dem Auftreten des Segmentation Faults mit "where" den Stacktrace angesehen. Nach einigen hundert Zeilen hab ich aufgehört, zu versuchen, den Details dieses Stacktraces irgendwelche Informationen zu entnehmen. Die wesentliche Information ist der Stacktrace selbst, im Speziellen dessen Länge.

    Du hast es hier mit einem Stack Overflow zu tun. Die Funktionen in deinem Programm rufen einander gegenseitig so lange auf, bis der Stack voll ist. Rekursion ist ja grundsätzlich etwas Nettes, man kann es damit aber auch übertreiben. Damit große Felder funktionieren, musst du an der Struktur des Programms arbeiten, um die Anzahl der rekursiven Aufrufe zu reduzieren. Schon allen die folgende Konstruktion ist ja absurd:

    Das ist eine Endlosschleife mit einem Stack Overflow als Abbruchbedingung. Ich würde stattdessen in main() so etwas Inovatives (sorry, konnte nicht widerstehen :shiner:) wie eine while-Schleife verwenden.


    Davon abgesehen sehe ich einigen Bedarf, kleinere Probleme im Code auszumerzen:

  • Alles Klar danke,

    Ich hab jetzt an meiner Struktur gearbeitet und soweit ich konnte verbessert.

    Jetzt hab ich das Problem dass beim markieren der Strahlen für die Dame am Schachbrett das Programm abstürtzt, ich hab keinen Fehler gefunden woher das kommt, weiss jmd warum das passiert ?

    Danke euch für die Hilfe.....ich muss das Programm bis Dienstag fertig haben :(.

    Neue Version im Anhang.

  • Schaut aus wie Dein allererstes Programm.. Habs mal spasshalber in den debugger geladen, weil ich grad 2 min zeit hatte.. Ohne, dass ich das alles überhaupt verstehen will, ist in StrahlenSetzen() irgendwo in einer loop ein "z--" vom Initwert 0 aus.. Kann wohl so nicht gehören..

  • stimmt ist es danke dir.

    kann mir BITTE jemand erklären oder gibt es irgendwo eine Anleitung wie man ein .c file in einen Debugger ladet damit ich wegen solcher Kleinigkeiten nicht immer hier posten muss ?

    Danke sehr

  • ich würd mir an deiner stelle visual studio express runterladen. ich bin allerdings nicht sicher, ob die aktuellste version überhaupt noch gewöhnliche C files übersetzen kann wg. dem c# lemming syndrom. im gdb geht das auch z.b. mit eclipse: http://stackoverflow.com/questions/3758…r-c-c-debugging

    see also: http://www.codeproject.com/Articles/14222…-Starters-guide

    2 Mal editiert, zuletzt von robotics (31. März 2013 um 23:22)

  • Aktuell hab ich Microsoft Visual Studio 2012 Ultimate , allerdings Programmieren tue ich mit Notepad++, deswegen würde ich gerne wissen ob ich auch mit dem Studio programmieren könnte und es dann auch Debuggen um an solche nützlichen Infos zu kommen.

  • Meine 2c:

    Du hast gesagt, es ist für die Uni.
    Wirst du noch viele Programme schreiben? Wenn ja in welcher Sprache/welchen Sprachen? Wirst du beruflich Programme schreiben? Wenn ja hast du schon eine Ahnung welche Toolchain dein Arbeitgeber hat?
    Je nach den Antworten auf diese Fragen zahlt es sich mehr oder weniger aus sich in ein "komplexeres" Framework ein zu arbeiten.

    Meine Toolchain für C/C++:
    Vim als Editor (da hast du notepad++ und wenn du damit zufrieden bist sehe ich keinen Grund das zu ändern)
    gcc/g++ als Compiler (MSVS)
    Cmake als build managment/test managment (damit ich nicht immer ewig lange Dinge in die command line tippen muss und für ein paar andere Vorteile ;), hier gibts einiges ant, make, MSVS,....)
    gdb als Debugger (OllyDbg wäre da eine Windows Alternative wenn du nicht MinGW laden möchtest)

    Du kannst, wenn ich mich recht erinnere alle diese Dinge auch in MSVS machen, musst es aber nicht.
    Generell schlage ich dir vor, eine Suchmaschine deiner Wahl, ich:Google, an zu werfen, und einige Dinge zu lesen.
    Zum Beispiel finden sich mehrere Tutorials in Schrift und Video online die dir beim Einlernen in MSVS helfen können, natürlich gibt es auch noch die Doku von MS selbst.

    Noch ein wenig zu mir:
    Ich arbeite hauptsächlich auf *nix Systemen und schreibe viel in C/C++,Cyton,Python. Ich habe einige Zeit mit Eclipse gearbeitet und bin dann auf meine obige Toolchain umgestiegen, da ich die, für mich, simplere Flexibilität bevorzuge.

    Hope that helps
    Tor

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!