Array von Strukturen



  • Du solltest die alte Größe des Arrays auch als Parameter mit übergeben, damit sie das Ende der Funktion überlebt:

    int eingabe(Konto** pkonten,int oldsize)
    {
      ...
    }
    
    //in der main:
    Konto* konten = NULL;
    int size = 0;
    ...
    switch(auswahl)
    {
    case 1:
      size = eingabe(&konten, size);
      break;
    case 2:
      ausgabe(konten, size);
      break;
    ...
    }
    

    PS: Die Prototypen der Funktionen eingabe() und ausgabe() sollten nach Möglichkeit zu den später folgenden Definitonen passen, das hilft dir und dem Compiler. Und die globale Variable int anz; bringt dir auch keine Pluspunkte.



  • Ahhhhhhh was habt ihr gegen meine Überprüfung, ob malloc/realloc gefailed hat oder nicht ? :p Besonders wenn man immer wieder speicher anfordert :o



  • Danke, CStoll! Jetzt funktioniert auch das, auch wenn nur mit der globalen Variable anz. Ich krieg es ohne die globale Variable irgendwie nicht hin, bin wohl zu blöd dazu. 😃

    Jetzt bin ich richtig happy weil alles funktioniert, ich alles halbwegs verstanden habe und morgen wohl mein Testat bekomme. 🙂

    cvcv schrieb:

    Ahhhhhhh was habt ihr gegen meine Überprüfung, ob malloc/realloc gefailed hat oder nicht ? :p Besonders wenn man immer wieder speicher anfordert :o

    Ach sorry, das baue ich natürlich auch noch rein. 😉 Hab nur rumexperementiert und fand es mit CStoll´s Version etwas übersichtlicher. Ich bin noch ein Newbie und große Programmiercodes machen mir Angst... 😃 😃



  • Die Parameter-Übergabe an die Funktion ausgabe() hast du doch auch hingekriegt, so ähnlich sollte es auch bei der eingabe() funktionieren. Du mußt nur daran denken, daß die neue Arraygröße als Rückgabewert herausgegeben wird - und diesen Rückgabewert entgegennehmen.

    cvcv schrieb:

    Ahhhhhhh was habt ihr gegen meine Überprüfung, ob malloc/realloc gefailed hat oder nicht ? :p Besonders wenn man immer wieder speicher anfordert :o

    Nimm's nicht persönlich - ich bin halt C++-verwöhnt 😃
    (weißt du eigentlich, ob nach einem misslungenen realloc()-Aufruf der bisherige Speicherbereich noch gültig ist?)

    @mr unknown: Die zwei Zeilen zur Auswertung des realloc()-Ergebnisses solltest du dir aber wirklich noch gönnen.



  • CStoll schrieb:

    Die Parameter-Übergabe an die Funktion ausgabe() hast du doch auch hingekriegt, so ähnlich sollte es auch bei der eingabe() funktionieren. Du mußt nur daran denken, daß die neue Arraygröße als Rückgabewert herausgegeben wird - und diesen Rückgabewert entgegennehmen.

    cvcv schrieb:

    Ahhhhhhh was habt ihr gegen meine Überprüfung, ob malloc/realloc gefailed hat oder nicht ? :p Besonders wenn man immer wieder speicher anfordert :o

    Nimm's nicht persönlich - ich bin halt C++-verwöhnt 😃
    (weißt du eigentlich, ob nach einem misslungenen realloc()-Aufruf der bisherige Speicherbereich noch gültig ist?)

    😛 Schlimme Sache ! ^^

    Ja, er ist noch gültig, soweit ich weiss.

    If the function failed to allocate the requested block of memory, a NULL pointer is returned, and the memory block pointed to by argument ptr is left unchanged.



  • Ja, er bleibt gültig. Man muss den Zeiger aber logischerweise vorher sichern, damit er bei einem Fehler nicht mit NULL überschrieben wird.



  • CStoll schrieb:

    @mr unknown: Die zwei Zeilen zur Auswertung des realloc()-Ergebnisses solltest du dir aber wirklich noch gönnen.

    Werd ich aufjedenfall machen. Kann nicht schaden und ich lerne etwas dabei.

    P.S. Du bist anscheinend ein exzellenter Programmierer. Ich werde froh sein, wenn ich irgendwann auch nur halb so gut wie du werde. 🙂



  • mr_unknown schrieb:

    CStoll schrieb:

    @mr unknown: Die zwei Zeilen zur Auswertung des realloc()-Ergebnisses solltest du dir aber wirklich noch gönnen.

    P.S. Du bist anscheinend ein exzellenter Programmierer. Ich werde froh sein, wenn ich irgendwann auch nur halb so gut wie du werde. 🙂

    Das ist er in der Tat ^^ Immer schön weiter lernen, solange es Spass macht lernt man extrem schnell und gut.



  • Danke euch beiden 🙄



  • cvcv schrieb:

    mr_unknown schrieb:

    CStoll schrieb:

    @mr unknown: Die zwei Zeilen zur Auswertung des realloc()-Ergebnisses solltest du dir aber wirklich noch gönnen.

    P.S. Du bist anscheinend ein exzellenter Programmierer. Ich werde froh sein, wenn ich irgendwann auch nur halb so gut wie du werde. 🙂

    Das ist er in der Tat ^^ Immer schön weiter lernen, solange es Spass macht lernt man extrem schnell und gut.

    Jap, merk ich auch, dass es dann schneller geht. 🙂 Spaß macht es mir mittlerweile tatsächlich. Muss nur versuchen mehr Zeit ins Programmieren zu investieren.



  • edit: ok hat sich erledigt^^



  • Hallo, ihr habt hier super Beispiele aber ich habe eine frage ich muss ein ähnliches programm schreiben und muss das array dynamisch machen ! d.h. ich muss eine datei einlesen und danach weiß ich erst wie viele Strukturen ich haben mussen , dieses kann zwischen 1 und ca 2000 sein !gibt es da eine möglichkeit wie in dem Beispiel von euch das Konstant irgendwie dynamisch zu machen ?

    mfg bernd



  • Ich meinte KONTOANZ



  • Wo genau liegt denn dein Problem? Bei den letzten Beispielcodes wird die Konstante gar nicht mehr verwendet, sondern die Anzahl in einer Variable gespeichert.


Anmelden zum Antworten