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ß
-
mallocundreallocsind C. Du willst C++ programmieren, also nimmst am bestenstd::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
anzahlkann weg, dafür gibtsausgaben.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.