Absturz bei realloc()



  • Hi,

    ich bin gerade dabei etwas mit Klassen herumzuspielen, dabei bin ich bisher zu folgendem Code gelangt:

    #include <iostream>
    #include <string>
    using namespace std;
    
    class Geldausgabe
    {
        private:
            int monat;
            int tag;
            float summe;
            string grund;
        public:
            void setMonat(int neuerMonat) { monat = neuerMonat; }
            void setTag(int neuerTag) { tag = neuerTag; }
            void setSumme(float neueSumme) { summe = neueSumme; }
            void setGrund(string neuerGrund) { grund = neuerGrund; } 
            int getMonat() { return monat; }
            int getTag() { return tag; }
            float getSumme() { return summe; }
            string getGrund() { return grund; }
    };
    
    class GeldausgabenVerwaltung
    {
        private:
            Geldausgabe *ausgaben;
            int anzahl;
        public:
            GeldausgabenVerwaltung()
            {
                anzahl = 0;
                ausgaben = (Geldausgabe*)malloc(0);
            }
            ~GeldausgabenVerwaltung()
            {
                free(ausgaben);
            }    
            void speichereGeldausgabe(int tag, int monat, float summe, string grund)
            {
                Geldausgabe ausgabe;
    
                ausgabe.setTag(tag);
                ausgabe.setMonat(monat);
                ausgabe.setSumme(summe);
                ausgabe.setGrund(grund);
    
                anzahl++;
                ausgaben = (Geldausgabe*)realloc(ausgaben, anzahl*sizeof(Geldausgabe));
                ausgaben[anzahl-1] = ausgabe;
            }
    };
    

    Die main-Methode sollte hier nicht wichtig sein. Wenn ich nun speichereGeldausgabe mit korrekten Parametern aufrufe stürzt das Programm ab. Allerdings nur, wenn die letzte Zeile (ausgaben[anzahl-1] = ausgabe) nicht auskommentiert ist. Lasse ich sie weg, stürzt das Programm zumindest nicht ab. Was meint ihr, woran das liegen könnte? Ich seh den Fehler einfach nicht.

    Danke und Gruß



  • malloc und realloc sind C. Du willst C++ programmieren, also nimmst am besten std::vector . Bei den Artikeln auf c-plusplus.net gibt es eine Einführung in STL-Container, lies die mal!



  • Okay, danke für den Tipp. Aber angenommen ich habe C, wo liegt der Fehler? 🙂



  • Herr-Vorragend schrieb:

    Okay, danke für den Tipp. Aber angenommen ich habe C, wo liegt der Fehler? 🙂

    In C gibt es kein class , keine Kon- und Destruktoren.



  • Herr-Vorragend schrieb:

    Okay, danke für den Tipp. Aber angenommen ich habe C, wo liegt der Fehler? 🙂

    Da muß ich wohl eine Überweisung an die Fachleute machen..



  • Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Okay, nun bin ich auf Vektoren umgestiegen:

    class GeldausgabenVerwaltung
    {
        private:
            vector<Geldausgabe> ausgaben;
            int anzahl;
        public:
            GeldausgabenVerwaltung()
            {
                anzahl = 0;
                //ausgaben = (Geldausgabe*)malloc(100*sizeof(Geldausgabe));
            }
            ~GeldausgabenVerwaltung()
            {
                //free(ausgaben);
            }    
            void speichereGeldausgabe(int tag, int monat, float summe, string grund)
            {
                Geldausgabe ausgabe;
    
                ausgabe.setTag(tag);
                ausgabe.setMonat(monat);
                ausgabe.setSumme(summe);
                ausgabe.setGrund(grund);
    
                anzahl++;
                //ausgaben = (Geldausgabe*)realloc(ausgaben, anzahl*sizeof(Geldausgabe));
                ausgaben[anzahl-1] = ausgabe;
            }
    }
    

    Und dennonch stürzt das Programm in der gleichen Zeile ab. Anscheinend mache ich einen ziemlich dummen Anfängerfehler, aber welchen? 🙂



  • Herr-Vorragend schrieb:

    Okay, nun bin ich auf Vektoren umgestiegen:

    Gute Entscheidung, leider ist dein Beitrag jetzt wieder im falschen Forum 🙂

    Und dennonch stürzt das Programm in der gleichen Zeile ab. Anscheinend mache ich einen ziemlich dummen Anfängerfehler, aber welchen? 🙂

    Ersetze

    ausgaben[anzahl-1] = ausgabe;
    

    durch

    ausgaben.push_back(ausgabe);
    

    und anzahl kann weg, dafür gibts ausgaben.size() ;



  • Ja, da wurde ich wohl zu schnell verschoben 🙂

    Aber danke, nun klappt es.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten