Am Montag, 14. Januar 2002 19:10 schrieben Sie:
On Mon, Jan 14, 2002 at 06:13:07PM +0100, Steffen Liebergeld wrote:
Hi,
[Problem mit Arrays]
Also mal zum Zusammenhang zwischen Pointern und Arrays:
Bsp. a) Ich defininiere einen Array von chars
char myarray[8];
die Variable myarray ist jetzt logischerweise vom Typ char* und zegt auf den Anfang des Arrays. Das erste und zweite Element koennte ich jetzt so beschreiben
char *pc = myarray; *pc = 'a'; pc++; *pc = 'b';
Bsp. b) Jetzt definieren wir einen zweidimensionalen Array
char myarray[8][8];
Jetzt haengt der Typ von der Betrachtungsweise der einzelnen Elemente ab. i) Wenn ich ein konkretes Element haben will, gebe ich "Spalte" und "Zeile" an:
myarray[1][5] = 'a'; //typ char
ii) Wenn ich nur die "Zeile" angebe, erhalte ich einen char* (analog Bsp. a))
char* pc = myarray[0]; strncpy(pc, "Hello\n", 8);
Der Pointer zeigt dann auf den Anfang des "Subarrays"
ii) Wenn ich nur myarray angebe, erhalte ich einen char** (lies: Pointer auf einen Pointer). D.h. myarray zeigt auf den Anfang des Arrays (ist also ein char*), der seinerseits wieder aus Unterarrays besteht, d.h. jedes Element davon ist (siehe a)) ein char*. Deswegen ist myarray vom Tp char**.
Das sollte deine Frage dann beantworten. Das Konzept ist am Anfang etwas schwer zu verstehen, ergibt aber zum Schluss Sinn. :)
OK, das habe ich jetzt verstanden. Danke für die aufschlussreichen Ausführungen. Jetzt habe ich noch ein weiteres Problem mit Arrays (oder eher mit globalen und lokalen Variablen):
Mit globalen char Arrays (RAM[8]) läuft das Program ohne Probleme, wenn ich die Arrays allerdings lokal deklariere (siehe unten), dann endet das Program mit einem Segmentation fault. Theoretisch dürfte es aber doch gar keine Probleme geben oder hab ich da was übersehen?
// Gibt den Betrag des Arbeitsspeichers aus /proc/meminfo aus double getRAM(FILE * ptr) { char RAM[8]; //<---hier steckt das Problem fseek(ptr, 166, 0); for (int i = 0; i <= 8; i++) { RAM[i] = fgetc(ptr); } return strtod(RAM,NULL); }
Wird vielleicht das Array schon vor der Rückgabe gelöscht (vor return ...)?