dynamische datenstruktur......



  • hallo,

    ich hab das problem, dass ich in einer funktion, nennen wir sie generate(), eine structur dynamisch anlegen will.
    diese dynamisch angelegte struktur soll aber global zur verfügung stehen, bzw. eben in der main funktion.
    wie kann ich dieses prob lösen, dass die dynamisch angelegte struktur in generate(), die ja somit dann lokal in generate nur ist, auch in main verfügbar ist also quasi "global". ich komm einfach auf keinen grünen zweig könnt ihr mir helfen?

    danke für eure zeit
    TBone



  • Eine Möglichkeit wäre folgendes:

    #include <iostream.h>
    #include <vector>
    #include <string>
    
    vector<std::string> *generate()
    {
      vector<std::string> *dataStruct = new vector<std::string>();
      dataStruct->push_back("erster Eintrag!");
      return(dataStruct);
    }
    
    in main()
    {
      vector<std::string> *dataStruct=generate();
      //hier: dataStruct verwenden
      delete dataStruct;
      return(0);
    }
    

    ==> die Datenstruktur wird also nicht lokal in generate erzeugt sondern dynamisch auf dem Heap. Den Zugriff in main erhalten wir dann einfach über die Adresse!

    Grüße,
    TS++

    [ Dieser Beitrag wurde am 12.05.2003 um 09:05 Uhr von TS++ editiert. ]



  • Moin!

    Warum legst du deine Struktur nicht so an?

    struct DeinStruct
    {
       //Variablen
    };
    
    int main ()
    {
       DeinStruct *ds; 
       ds = new DeinStruct;
    }
    

    😕



  • hallo,

    erstmal dank für eure antworten, nur leider kann ich damit nicht viel anfangen da sie an dem eigentlichen prob vorbei gehen.
    am besten isch geb mal etwas quellcode frei.
    es handelt sich hier bei nähmlich um eine einfach verkettete liste, und die generate() funktion soll entweder die adresse eines neuen listen elementes erhalten, dieses der liste angliedern und mit werten füllen, wenn generate aber einen NULL-zeiger erhählt soll es eine neue liste anlegen( und hier ist dann auch mein prob)dynamisch!

    struct digit
    { float wert;
    digit *pNext;
    }
    
    int generate(digit *&pa);
    

    weiter bin ich leider mit der funktion noch nicht, weil ich eben nicht weiss wie ich das machen soll, das ich in der funktion ein struktur element digit anlege dynamisch, und dieses dann aber auch ausserhalb der funktion zurverfügung habe?
    vielleicht sollte ich auch fragen geht das überhaupt?

    ps:
    ts++:
    dein quellcode glaub ich ist fehlerhaft, denn datastruct legst du dynamisch an, und giebst dann seine adresse raus und weisst dies einem anderen element zu, nur wird doch datastruct nach ende der funktion abgeschossen und verschwindet im nirvana des kellerspeichers!
    oder täusche ich mich da?



  • Original erstellt von TBone:
    oder täusche ich mich da?

    jep, du täuscht dich.

    schlag mal 'dynamisches speichermanagement' in deinem lieblings c++ buch nach



  • hallo,

    shade,

    d.h. also das ich die ganze geschichte auch auf mein prog übertragen könnte mit

    .....
    pDigit=new digit;
    return digit;
    .....
    

    tschau
    TBone



  • du kannst gerne in einer funktion dynamisch speicher allokieren und ohne innerhalb der funktion wieder freizugeben einen zeiger zurückgeben. nur dann im main-programm sauber aufpassen, dass das freigegeben wird!



  • hallo,

    danke leute für eure hilfe, ich seh die dinge immer komplizierter als sie eigentlich sind, aber ihr hab mir die augen geöffnet!

    tschau
    TBone



  • Und was sind im Zusammenhang mit einem Heap die s.g. Frei-Listen?


Anmelden zum Antworten