Dynamische 2d Arrays zur Laufzeit erstellen
-
wie gesagt unter
http://www.pronix.de/pronix-625.html
wird genau dieses beschrieben!
programmieren beinhaltet leider auch das lesen!
-
Vielen Dank an euch alle.
Besonders an --linuxuser--!
Mein Proggy läuft erstmal!
THSD THX!
-
Vendor2k schrieb:
Könnte von mir ja ein ganz dummer Fehler sein, sry.
War es nicht so, dass bei C alle Variablen am Anfang der Funktion deklariert werden müssen?
Die Zuweisung zwischen drin, dürfte das Problem sein.
-
die "zuweisung zwischendrin" wuerde der compiler schon abweisen, wenns denn illegal ist.
-
Aber was war denn dann das Problem des anderen Codes?
Bis auf die Zuweisungen war doch alles gleich, oder?
-
Das mit den Anweisungen verstehe ich auch nicht.
Das ist aber, glaube ich, mit jeder Variablenzuweisung so. Nicht nur die x und y.
Eine andere Frage:
Die zwei Arrays sind jetzt schon anders.
Wenn ich das DIng am Anfang fest definiere
Array[8][9]dann zeigt mir die Watch das auch als solches an.
Bei der nachträglichen Änderung wird das Array als Array double ** angezeigt.
Die Funktion zur übernahme der Daten unterstützt nun dieses Array nicht mehr.
Kann ich das was mit eine anderen Zeiger zuweisung machen???
-
Vendor2k schrieb:
Wenn ich das DIng am Anfang fest definiere
Array[8][9]dann zeigt mir die Watch das auch als solches an.
Bei der nachträglichen Änderung wird das Array als Array double ** angezeigt.
Liegt daran, dass Array im ersten Fall ein Array ist und im zweiten Fall ein Pointer.
-
hehejo schrieb:
War es nicht so, dass bei C alle Variablen am Anfang der Funktion deklariert werden müssen?
Jo, aber nur bei C89. Außerdem hat das nichts mit Zuweisungen zu tun.
hehejo schrieb:
Aber was war denn dann das Problem des anderen Codes?
Bis auf die Zuweisungen war doch alles gleich, oder?Eigentlich sind beide Listings shit, denn zuerst wird ein int pointer namens XData definiert, und ein paar Zeilen drunter wird ein int Pointer auf int Pointer namens XData (wiedermal) definiert. Die Zuweisungen sind völlig legal. Wäre ja wohl ein Witz wenn ich nicht mitten in der Funktion meinen Variablen was zuweisen könnnte.
Und so geht's wirklich:
int **XData = 0; int rows = 10; int columns = 20; int i=0; XData = malloc(rows*sizeof(int*)); for ( ;i<rows;++i) *(XData+i) = malloc(columns*sizeof(int));
EDIT: Tippfehler
EDIT2: Fehler korrigiert
-
@GPC
Ich glaub du hast noch einen Tippfehler drin. Schau dir mal an auf was du bei deinem ersten malloc() zuweist ;).
-
AJ schrieb:
@GPC
Ich glaub du hast noch einen Tippfehler drin. Schau dir mal an auf was du bei deinem ersten malloc() zuweist ;).Ach mensch, du musstest es jetzt ja sehen...