Speichverwaltungsproblem



  • Hallo!

    In meinem Programm habe ich eine sehr grosse Klasse eingefügt!
    Diese Klasse beinhalten sehr viele Membervariablen, für die ich im Konstruktor
    mittels a(0),b(0)... usw. Speicher allokiere.

    Nun habe ich noch eine Membervariable hinzugefügt mittels dem oben genannten Verfahren.Bis zu diesem Zeitpunkt funktionierte mein Programm einwandfrei, es kompilierte korekt und auch die Ausführung war immer problemlos. Es scheint, dass die neue Variable das Fass zum überlaufen bringt, denn füge ich diese hinzu, so kompiliert das Programm, aber beim Ausfürhren bekomme ich einen
    read Fehler.
    "Die Anweidung in"0x77f48dc" verweist auf Speicher in"0xfffffff8". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden "
    Ich vermute, dass das Programm einfach zu viel Arbeitsspeicher benötigt!!

    Kann, dass sein????? Oder gibts da vielleicht noch ne andere Erklärung??
    Kann ich das irgendwie prüfen mit dem Speicher???

    Grüße

    Verena



  • Eigentlich sollte das kein Problem sein. Man muss schon masochistisch veranlagt sein, um eine so große Klasse mit einfachen Variablen hinzukriegen.

    Lass doch einfach mal den folgenden Code laufen:

    #include <iostream> 
    int main()
    {
       std::cout << sizeof(DEINEKLASSE) << std::endl;
    }
    

    Ansonsten wäre ein Testcase mit dem Fehler sinnvoll. Du könntest das Programm auch durch valgrind laufen lassen.



  • Schau einfach mal mit einem Debugger wo er auf diesen Fehler läuft. Die Adresse auf die zugegriffen werden soll lässt mich fast schon vermuten dass hier irgendwo von einem Nullzeiger was subtrahiert wurde (?!)



  • Hallo!

    Danke für die schnelle Antwort werde mal alles testen und dann berichten!

    Grüßle
    Verena



  • So, Problem gelöst!
    Beim ausgeben der größe meiner Klasse an mehreren Stellen in meinem Code, hat sich das Program bereitwillig zum weiterlaufen entschieden! Sehr merkwürdig- habe nichts verändert nur einige Ausgaben hinzugefüft und schon läufts!

    Das ich auf eine falsche Speicheradresse zugreife konnte eigentlich nicht sein, da das Programm nur abstürzte, wenn ich eine weitere Membervariable
    hinzufügte. Die verwendete ich jedoch noch gar nicht. Davor lief ja alles rund!!
    Trotzdem vielen Danke

    Verena


Anmelden zum Antworten