Pointerfehler?



  • Hallo!

    Hab ein Programm mit einer Klasse PrimComputer. Da gibts eine Mehode, die mir Primzahlen und viele Sachen dazu berechnet. Wenn ich die Klasse das erste Mal instanziere und die Methode aufrufe, gibts kein Problem, die Berechnung stimmt. Dann folgt der Destruktoraufruf. Später instanziere ich sie dann wieder und mach exakt die gleiche Berechnung. Da ist das Ergebnis aber falsch. Und bei jeder weiteren Instanz bleibt dieses falsche Ergebnis (immer das gleiche bei der gleichen Berechnung). Ich dachte zuerst an einen Pointerfehler, weils viele Pointerberechnungen gibt. Hab mir aber auf jede Speicherstelle, die mit new geholt wird, einen eigenen Pointer zum Löschen gemacht und damit wird beim Destruktor alles freigegeben. Dann dachte ich an die static Variablen, aber die passen auch alle. Jetzt weiss ich nicht mehr wo ich noch suchen soll. Weiss jemand einen Tip?

    Lg
    Kris



  • In Zeile 39, bei diesem if, da solltest du noch mal genauer nachsehen.



  • Ja, ich weiss, dass ich keinen Code dabei hab. Aber der Hauptteil alleine, wo irgendwo der Fehler liegt, ist mehrere tausend Zeilen lang. Ich kann zwar alle 21 cpp-Files mit ihren Headern reinstellen, aber ich glaub nicht, dass sich jemand die Arbeit machen will, das durchzuschaun. Ich hab ein Programm übernommen, in eine Klasse PrimComputer verpackt und aus der Main eine normale methode gemacht. Ich hätt einfach gern ein paar allgemeine Tips, wo ich noch was finden könnte.
    Havaniceday
    slate



  • Wie instanzierst du? Wie rufst du den Destruktor auf?
    Werden im Konstruktor der Klasse alle Elemente initialisiert (Achtung: C++ initialisiert keine primitiven Typen mit 0 oder sowas)?

    Wenns beim ersten mal klappt, dann step mal mit dem Debugger beim zweiten Instanzieren durch den Konstruktor an und überprüfe alle Datenelemente, ob sie einen vernünftigen Startwert haben.
    Kann nämlich daran liegen, dass das Betriebssystem dir genullten Speicher gibt, aber beim zweiten mal ist er dann vermuckt, weil du dich nicht selber darum kümmerst.
    Sonst ist es aber ziemlich schwer, allgemeine Tipps zu geben. Da hilft nur debuggen.


Anmelden zum Antworten