Dynamische Arrays mit ...



  • Ich will ein dynamisches array vom typ char machen - blos wie? Das Array muss zudem beim Beenden der Funktion automatisch entfernt werden... Hat jemand einen kurzen Beispielcode für mich??

    help



  • siehe new[] und delete[]. Wenn Du String-Funktionalität benötigst ist allerdings std::string meist vorzuziehen.



  • NEW? ich denke beim Beenden einer Funktion wird der Speicher nicht freigegeben - das will ich ja gerade, dass es automatisch passiert... Man muss dann extra DELETE angeben. Oder doch nicht?

    Ich wollte das nicht nur für Char-Array, sondern auch für INT usw...



  • std::vector<char>



  • Gibt's ein kurzes Beispiel - wie soll man das anwenden?



  • Schau mal ob Du mit diesem link was anfangen kannst.
    oder diesen Link

    Sehr kuzres Beispiel:

    #include <vector>
    
    std::vector<int> test;
    
    test.push_back(1);
    test.push_back(2);
    
    int a = test[0];
    a = test[1];
    

    Natürlich hast Du noch mehr Möglichkeiten mit dem Vector aber ich denke das würde erst mal erschlagend wirken ?!

    [ Dieser Beitrag wurde am 24.04.2003 um 16:59 Uhr von Knuddlbaer editiert. ]



  • gibt es etwas "einfacheres" - evtl array manuell redimensionieren: in der art:

    int test[100];

    redim test[1000];



  • int* asd = new int[10];
    ...
    delete[] asd;
    asd = new int[15];
    


  • Einen redim gibt es nicht.

    Bei einem "redim" muss folgendes gemacht werden:

    Neuer Speicher muss aufgetrieben werden
    alle alten Elemente müssen in den neuen Speicher geschrieben werden
    alter Speicher muss freigegeben werden.

    Beschreib mal was Du mit dem Vector vor hast.



  • anstatt irgendeinem redim sollte man lieber realloc benutzen 😉 . Dies hätte aber zur Folge, dass man den Speicher auch mit malloc und free anfordern bzw. löschen muss und das ist in C++ schlicht und einfach k*cke 😉 . Dynamischer Speicher kann über vector, deque etc. aus der STL ziemlich einfach gehandhabt werden.



  • Original erstellt von Knuddlbaer:
    **Einen redim gibt es nicht.
    **

    Einspruch! realloc heisst es in C.



  • Original erstellt von Lars:
    [quote]Einspruch! realloc heisst es in C.

    Ich glaub Knuddlbaer wollte nur sagen, dass es keinen redim-Operator in C++ gibt 😉



  • Hm, realloc kenn isch nich 🤡 *zugeb*

    Ich kenn das redim was oben angesprochen wurde noch aus VB und dieses verhalten bekommt man nich in C hin.

    Hm, mich würde eher interessieren was TS mit dem vector vorhat. Ich denke so komplex ist der std::vector nicht. Und man hat doch viele vorteile mit 🤡

    Würde ihm den Vector gerne näher bringen, am besten direckt am Beispiel seines Problemes.



  • vector<int> asd(10);
    ...
    asd.resize(15);
    


  • <TS>: std::vector wird automatisch vergrößert wenn zusätzliche Elemente per push_back() angehängt werden, es gibt aber auch noch reserve(), resize(), back_inserter() uswusf



  • Naja ich programmiere einen Konverter Basic->C(++). Und da will ich unbedingt dynamische Felder haben - das ist allerdinst nicht einfach zu realisieren:

    Am optimalsten wäre es, wenn alles automatisch freigegeben wird, was ich zuvor belegt habe. Wenn ich new benutze, dann muss ich mit delete freigeben (soweit ich weiß). Wenn ich malloc benutze, dann muss ich mit free freigeben. ich suche irg. was automatisches - wie bei normalen arrays, variablen...

    int test()
    {

    int x[...] //dynamisches Feld erstellen

    if ..... return ...; //autom. x freigeben

    int y[...] //dynamisches Feld erstellen

    if ..... return ...; //autom x,y freigeben
    }

    in diesem Code kann int x reserviert werden und bei return muss es freigegeben werden. Es kann aber x und y reserviert werden - dann müssen beide freigegeben werden. Es ist fast unberechenbar was alles freigegeben werden muss (stell euch vor es gibt noch IF's usw...). Was kann man da blos machen?

    Das dabei Werte verlorengehen - ist halbsoschlimm - nur es muss ordentlich freigegeben werden - ich finde keine Lösung

    Wenn es geht, dann wäre mir irgendwas C-Kompatibles noch lieber...



  • In C gibt es sowas nicht, da ist malloc/ realloc/ free das Höchste der Gefühle.
    Lass Dir einen guten Tip geben und arbeite Dich in die Verwendung von std::vector ein, der ist extrem praktisch.



  • sehr schade - dann muss ich alles irgendwie faken...



  • Was heißt hier faken?

    Wenn Du Basic nach C++ konvertieren möchtest wird Dir wohl nichts anderes übrig bleiben!



  • *ggg*

    jo wenn c(++) sowas (automatisches) hätte, dann müsste ich nix faken... egal...


Anmelden zum Antworten