char felder?



  • Hallo,

    hab mal ne frage zu char-Feldern...
    Habe eine Funktion "OCIDefineByPos(...)", der ich u.a. einen char* übergebe.
    Wenn ich dieses Feld statisch definiere, also z.B. char feld[2][5][20], und dann als Funktionsparameter "feld[0][0] übergebe, funktioniert alles bestens.
    Leider weiss ich aber erst zur Laufzeit, welche Dimensionen das Feld haben wird.
    Wenn ich das Feld dynamisch definiere,z.B.[cpp]
    char*** dfeld=(char***) malloc(2);
    for(int i=0;i<2;i++)
    {
    dfeld[i]=(char**)malloc(5);
    for(int j=0;j<5;j++)
    {
    dfeld[i][j]=(char*)malloc(20);
    }
    }
    [cpp]
    dann klappt der Funktionsaufruf nicht mehr mit dfeld[0][0].
    Welche Unterschiede gibt es bei dynamsichen Feldern ausser dass sie eben erst zur Laufzeit erzeugt werden?

    mfg Kay



  • Wenn du das feld statisch deklarierst, dann hat es den datentyp
    char[2][5][20].
    das dynamische array hat allerdings den datentyp
    char***.
    2 unterschiedliche datentypen die nicht untereinander kompatibel sind.

    übrigens, wenn das c++ sein soll, lass die finger von malloc.
    verwende new und delete.
    vielleicht siehst du auch dass 3-dimensionale dynamische arrays
    nur schwer lesbar sind. (verschachtelte schleifen bei erzeugung und speicherfreigabe)
    versuche irgendwie an deinem design zu arbeiten.
    es gibt bestimmt einen eleganteren weg, deine funktion zu implementieren.



  • char*** dfeld=(char***) malloc(2); 
    
    for(int i=0;i<2;i++) 
    { 
        dfeld[i]=(char**)malloc(5); 
        for(int j=0;j<5;j++) 
        { 
            dfeld[i][j]=(char*)malloc(20); 
        } 
    }
    


  • ...mmh, ich könnte zur Not ein ein zweidimensionales Feld verwenden, aber dann hab ich immer noch das Problem dass ich das Feld dynamisch erzeugen muss...



  • verwende doch die klasse vector


Anmelden zum Antworten