Variablen einer Klasse werden spontan gelöscht[10euro]



  • Gute Tag ich wende mich an dieses Forum da ich ein Problem habe und seit ca. 3 Tagen nicht in der Lage bin dieses zu Lösen.
    (Ich bin noch relativ unerfahren aber kein totaler anfängermehr)

    Meine Frage ist nun durch was ein derartiger Fehler(siehe unten) verursacht werden kann und wie ich ihn ggf. beheben kann.

    Entwicklungsumgebung: MS VS c++ 2010, win XP 64

    Das Programm:
    Ich schreibe derzeit ein recht umfangreiches programm und habe zu diesem zweck ein weit verzweigtes menü bestehend aus mehreren funktion programmiert.
    Bei den Einzelnen funktionen werden dann wiederrum neue funktionen aufgerufen.
    Das Programm speichert alle Einstellungen die über das menü getätigt werden in einer klasse CSetup welche aus mehreren std::string und int variablen besteht.
    Das Setup wird dann ständig an die verschiedenen Funktion übergeben so das diese auch die CSetup membervariablen verändern können.

    Der Code:
    Am anfang deklariere ich mir einen zeiger

    CSetup *pCSetup = NULL;
    

    Gefolgt von der Speicherreservierung auf dem Heap für die Instanz CSetup und die zuweisung des Zeigers auf diese.

    pCSetup = new CSetup[1];
    

    Eine Funktion welche z.b. das Setup übergeben bekommen soll deklariere ich über

    void LoadLastSetup(CSetup *pCSetup);
    

    und rufe sie innerhalb des Programms über

    LoadLastSetup(&pCSetup[0]);
    

    auf.
    Die Funktion kann sich dann den Einstellungen des Setups bedienen und diese verändern.(Hat bisher immer ohne probleme geklappt)

    DAS PROBLEM:
    Das Setup wird munter von funktion an funktion mit der obigen methode übergeben.
    Das Funktioniert bis zu einem bestimmen punkt, wo eine funktion nach dem muster oben aufgerufen wird und als parameter fktX(&pCSetup[0]) übergeben bekommt.
    Nun ists so das sobald innerhalb dieser Funktion irgendeine Art von Befehl ausgeführt wird beispielsweise

    cout << "blablub" << endl;
    

    ALLE werte die innerhalb der Klasse CSetup gespeichert sind gelöscht und mit irgendwelchen randomisierten Zeichen mit bis zu 100k einträgen gefüllt werden.

    Meine Vermutung:
    Da ich noch ein anfänger bin und immer froh bin solange ein programm funktioniert aber nicht 100% genau weis was bei dem Zeiger und der speicherreservierung auf dem Heap passiert, vermute ich das es was damit zu tun hat.
    Das evtl. das Objekt nicht beliebig häufig übergeben werden kann?
    Das der Heap nach einer gewissen zeit gecleared wird ?
    Das irgendwie der zeiger an einen anderen ort springt ?
    Ich habe schon alles mögliche (was mir möglich ist) probiert aber habe einfach keine ahnung wie so ein fehler entstehen kann.

    Ich Wiederhole nochmal die Frage die ich nun habe:
    Wie kann sowas passieren, was kann sowas auslösen, wie kann man sowas verhindern.

    mfg Burnie365



  • Also wie die Ausgabe dort einen Einfluß auf den Heap haben kann, finde ich fraglich. Aber vermutlich hast du irgendwas anderes mit dem Setup kaputtgemacht, ohne es zu bemerken.

    PS: Wenn es nicht unbedingt notwendig ist, würde ich auf den Head verzichten. Erzeug dein CSetup-Objekt auf dem Stack und übergib es als Referenz an die Funktionen, die es nutzen/verändern wollen.



  • So habs jetzt umgeschrieben das program ohne den Heap und über referenzen.
    Komischerweise löschen sich die klassen variablen immernoch in der gleichen zeile 😞
    Es ist übrigens ob ich da cout oder irgend etwas anderes mache egal welchen code ich ausführe bekomme ich diesen fehler.



  • Zeig doch mal ein wenig zusammenhängenden Code, damit wird den Fehler besser nachvollziehen können.
    (übrigens: Wenn egal ist, was dort anstelle der Ausgabe steht, war der Fehler vermutlich etwas weiter vorne im Code - möglicherweise eine Index-Überschreitung in einer der beteiligten Methoden)



  • Das problem ist das es ein relativ umfangreiches projekt ist welches sich über mehrere Dateien erstreckt.
    Wie wäre es wenn du es mit mir mal über Teamviewer durchgehen würdest?
    meine $kype id ist: burnieonemill.
    Würde für ein gelöstes problem auch 10 euro bezahlen.



  • lol...
    Problem gelöst das problem war das es kein problem gab 😕
    Es ist nur so das der MS VS 2010 von basis klassen keine variablen überwachung besitzt ...


Log in to reply