Dynamische Arrays



  • wie kann ich Arraygröße später ändern (egal ob Werte verlorengehen oder nicht) - und wenn es geht wie kann man dynamische Arrays machen?



  • schau mal nach dynamischen datenstrukturen, wie
    baeume und listen.



  • dynamische array's kann man so implementieren:

    wenn du ein array mit einer dim willst:

    datentyp *array;

    array = (datentyp*)malloc(10*sizeof(datentyp));

    //hier kannst du 10 mal deinen datentypen ablegen (von array[0] - array[9])

    erweitern:
    array = (datentyp*)realloc(10*10*sizeof(datentyp));

    //nun kannst du insgesamt 100 mal deinen datentypen ablegen
    und wenn schon daten drin stehen bleiben die drin

    wenn du jedoch ein array mit zwei dim willst:

    datentyp **array;

    array = (datentyp**)malloc(10*sizeof(datentyp));

    for(int n = 0;n <= 10; n++)
    {
    array[n] = (datentyp*) malloc(10*sizeof(datentyp));
    }
    //Schleife weil du ja jetzt mehrere ebenen hast für die du platz anfordern musst

    Erweitern ist das selbe nur halt wieder mit realloc!



  • Hm, erweitert man nicht mit

    x = (datentyp*) realloc(x,20*sizeof(datentyp);
    


  • Hallöchen an Alle! Ich bräuchte Dringend mal Hilfe zu dem o.g. Problem, und zwar wisst ihr vielleicht auch wie man ein mehrdimensionales Array deklarieren kann? Im folgenden will ein x-Dimensionales Array erzeugen (d.h. Dimensionen und Elemente je Dimension sollen dynamisch sein), aber ich glaube da hapert's irgendwie an der Logik:

    int dimensions = 3;
    int elements[] = {2, 40, 100};
    
    void **array_ptr = (void**) malloc(dimensions * sizeof(void*));
    for(int a = dimensions; a > 0; a--)
    {
            for(int b = 0; b < elements[a]; b++)
            {
                    if(b == 0)
                    {
                            array_ptr[a] = (void*) malloc(elements[a] * sizeof(void*));
                    }
                    else
                    {
                            array_ptr[a] = (void*) realloc(array_ptr[a], a * (elements[a] * sizeof(void*)));
                    }
            }
    }
    
    //sollte also folgendem entsprechen:
    
    char [2][40][100];
    

    Ich weis zwar das ich nur mit void* arbeite, aber eigentlich kann ich doch dann damit einen String-Erzeugen mit (char*) malloc(1024*sizeof(char) ... ??? Ich weis auch nicht irgendwie kapier ich nicht ob mein Beispiel richtig ist oder nicht ... ausgeführt wird das Programm ohne Fehler... 😞 😕 🙄

    Dank & Gruss,
    ~code_pilot 😞



  • Hmmm... kannst du vielleicht noch genauer erklären was du damit bezwecken willst?

    Einen Fehler hab ich aber trotzdem gesehen. Der Index beginnt in C immer bei 0 nicht bei 1. Schau mal mit welchem Wert du a initialisierst und wie weit du a runterzählst ;).
    Die casts vor malloc() und realloc() kannst du dir in ANSI-C übrigens sparen. Das meckert nur ein C++-Compiler an ;).


Anmelden zum Antworten