Arbeitsspeicherproblem wg zu großen Klassen?



  • Hi!

    Ich wollte eigentlich eine Klasse/Struktur schreiben, die eine Unterklasse hat, und die wiederum auch eine. Nun habe ich das Problem, daß das Programm wegen der Unterklassen nicht zum Laufen geht.

    Die Klasse sollte den folgenden Aufbau haben.

    /////////////////////////////////////////////////////////////////////////////
    // Benötigten Variablen und Klassen
    
    class CDaten {
      public:
      class mdaten {
        public:
          int nr;
          CString vorname;
          CString nachname;
          CString strasse;
          CString plz;
          CString ort;
          int status;
      };
    
      class mdays { public:
        int day;
        int maxstunden;
        CString name; //wird nicht genutzt
        class arbeitskraft { public:
          int nr;
    /*      class Leistung { public:
            CString auftragsnr;
            int ort;
            CString dauer;
            int kfz; //wird nicht genutzt
          };
          Leistung leistungen[20];
          int leistungen_anz;*/
        };
    
        arbeitskraft akraft[100]; // entspricht der Anzahl an Mitarbeitern
        int akraft_anz;
      };
    };
    

    Wo liegt da der Fehler?



  • Nun habe ich das Problem, daß das Programm wegen der Unterklassen nicht zum Laufen geht.

    Was genau passiert? Den Fehler hab ich nämlich auch: Speicherfehler, wenn Klasse zu groß?
    Anscheinend wenn die Klasse >1kB ist.



  • Meinereiner hat keine Probleme mit dem Konstrukt!
    Wie erstellst Du ein CDaten-Objekt?



  • Erstellen tu ich das Programm mit VC6++ Prof. Egal ob Debug oder Release-Version beides beendet mein Programm, bevor es gestartet ist.

    Ich habe das Problem jetzt so gelöst: Da ich gelesen habe, das ein Dialog mittels "normalen" DoModal den Speicher manchmal nicht richtig installiert, soll man anders vorgehen:
    statt:

    CBauhofStartDlg dlg;
        dlg.DoModal();
    

    sollte man lieber:

    CBauhofStartDlg *mydlg = new CBauhofStartDlg();
        mydlg->DoModal();
        delete mydlg;
    

    nehmen.

    Ich nehme an, das der vorreservierte Stack nicht ausreicht. Nur wo ich den ändern kann, weis ich nicht. Mit dieser Lösung klappt es z.Z. problemlos.

    Vielleicht hab ihr nen anderen Vorschlag?

    Gruß Ronny



  • RenéG: Wie erstellst Du ein CDaten-Objekt?

    mittels:

    CDaten dates[4000];
    


  • Also ich nehme mal an, dass Du eine Membervariable von mdays in CDaten hast, was aus deinem Beispielcode nicht hervorgeht.
    Da ohne Membervariable sizeof(CDaten) == 1, würde dates[4000] keine Probleme bereiten.
    Mit Membervariable allerdings würde ein Stack von ungefähr 130 MByte gebraucht werden.
    Du solltest hier also
    CDaten *dates = new CDaten[4000] verwenden.

    P.S. dates ist NICHT die Mehrzahl von Daten!


Anmelden zum Antworten