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