Guybrush Threepwood Geschrieben 6. September 2002 Geschrieben 6. September 2002 Hi, man kann ja einen Zeiger deklarieren und ihm zur Laufzeit ein Array zuweisen, also ungefähr so: int *i; main() { i = new int[29]; } [/PHP] Ich versuche jetzt aber in der Art ein mehrdimensionales Array anzulegen, also ungefähr so: [PHP] int **i; main() { i = new int[19][29]; } Das Problem ist, dass es so nicht funktioniert. Ich habe auch noch ein paar andere Möglichkeiten ausprobiert aber nichts klappt. Wäre nett wenn mir einer von euch dabei helfen könnte. Gruß wasweißich Zitieren
Goos Geschrieben 6. September 2002 Geschrieben 6. September 2002 Die Frage gabs hier schon oefter mal denk ich. Solltest mal die Suchfunktion benutzen. Vielleicht hilft dir schon der Thread hier, ansonsten such halt mal http://fachinformatiker-world.de/forums/showthread.php?threadid=26467 Goos Zitieren
Olli_Master Geschrieben 6. September 2002 Geschrieben 6. September 2002 Denkanstoss: Wie wird denn ein mehrdimensionales Array im Speicher abgelegt bzw. darauf zugegriffen? int **i; main() { i = new int[19][29]; } Das Reservieren des Arrays sollte nicht das Problem darstellen: int **i; main() { int iDim1 = 19; int iDim2 = 29; i = new int[ iDim1 * iDim2 ]; ... } Aber der Compiler kann aber hierbei nicht wissen, wie groß die erste Dimension des Arrays ist. Daher kann man NICHT schreiben: int iTest = i[1][1]; Also müsste man bei jedem Zugriff anhand der Zeile und Spalte die Position im eindimensionalen Array bestimmen. !!!Vorsicht beim verändern der Array-Größe!!! Und das Freigeben des Speichers nicht vergessen. Alternative : Eine Klasse, die das Array kapselt und den [] - operator überschreibt. Vielleicht gibt es die schon irgendwo? Zitieren
Guybrush Threepwood Geschrieben 6. September 2002 Autor Geschrieben 6. September 2002 Danke für den Link Goos aber die einzige für mich brauchbare Lösung die dort gefunden wurde: int** i; main() { i = (int**)malloc(sizeof(int[10])); i[10] = (int*)malloc(sizeof(int[20])); i[1][1] = 5; printf ("%i",i[1][1]); return 0; } [/PHP] verursacht bei mir immer einen Programmabsturz. Ansonsten konnte ich im Forum auch nichts finden was mir weiterhilft. Vielleicht hilft es euch ja mir zu helfen wenn ich sage wofür ich das brauche. Also, ich will eine Tabelle darstellen die sich der Anzahl der Werte anpasst (d.h. bei 6 Rubriken und 40 Datensätzen hat die Tabelle 6 Spalten und 40 Zeilen). Hirfür wollte ich halt ein mehrdimensionales Array des Datentypes [i]HWND[/i] dynamisch anlegen. Die Alternative von Olli_Master: [i]Eine Klasse, die das Array kapselt und den [] - operator überschreibt. Vielleicht gibt es die schon irgendwo?[/i] hab ich nicht so ganz verstanden vielleicht kann mir das noch jemand erklären. Zitieren
Goos Geschrieben 6. September 2002 Geschrieben 6. September 2002 Hmmm.....was fuer nen Programmabsturz verursachts denn? ...und in welcher Art und Weise bindest du das ein? .....vielleicht postest mal n Stueckl von deinem Quellcode. Goos Zitieren
Guybrush Threepwood Geschrieben 6. September 2002 Autor Geschrieben 6. September 2002 Hier ist der ganze Code(der dient nur zum Testen): #include <stdio.h> #include <malloc.h> int** i; main() { i = (int**)malloc(sizeof(int[10])); i[10] = (int*)malloc(sizeof(int[20])); i[1][1] = 5; printf ("%i",i[1][1]); return 0; } [/PHP] Beim Ausführen bekomme ich in der Zeile [i]i[1][1] = 5; [/i] eine Access Violation. Zitieren
Goos Geschrieben 6. September 2002 Geschrieben 6. September 2002 Is mir schon klar, dass das nicht funktioniert...du hast dir wohl genau das falsche Stueck Code rausgesucht Versuchs in dem Fall lieber mal mit main() { int** i; i = (int**)malloc(sizeof(int*)); i[0] = (int*)malloc(20 * sizeof(int)); i[0][0] = 5; i[0][19] = 19; printf ("%i",i[0][0]); printf ("%i",i[0][19]);[/PHP] Falls du noch weitere Erklaerungen brauchst, dann frag einfach danach Goos Zitieren
Guybrush Threepwood Geschrieben 6. September 2002 Autor Geschrieben 6. September 2002 Cool, jetzt klappts. Danke Goos! Aber warum klappt das nicht?:confused: #include <stdio.h> #include <malloc.h> int** i; main() { i = (int**)malloc(sizeof(int*)); for (int h=0; h<20; h++) i[h] = (int*)malloc(20 * sizeof(int)); i[0][0] = 5; printf ("%i",i[0][0]); return 0; } [/PHP] Macht keinen Fehler und gibt nichts aus. Wie sieht das Feld nach der Schleife aus? i[20][?] Zitieren
Goos Geschrieben 6. September 2002 Geschrieben 6. September 2002 Du braeuchtest dazu die Zeile: i = (int**)malloc(20 * sizeof(int*)); anstelle von i = (int**)malloc(sizeof(int*)); ...wodurch das ganze aber dann nicht mehr sonderlich dynamisch ist *g* .......wenns doch noch dynamisch sein soll, dann musst mit realloc arbeiten. Goos Zitieren
Guybrush Threepwood Geschrieben 6. September 2002 Autor Geschrieben 6. September 2002 Wenn ich (int**)malloc(20 * sizeof(int*)) schreibe hab ich genau das was ich brauche, ein zweidimensionales Array was zur Laufzeit seine Größe zugewiesen bekommt. Warum ist das jetzt nicht mehr so dynamisch? Danke für die gute Hilfe!!!! Zitieren
Goos Geschrieben 6. September 2002 Geschrieben 6. September 2002 Na das ist nicht mehr so dynamisch, weil du ja gleich festlegst, dass es 20 mal 20 gross ist, also aenderst daran ja nix mehr.....also ists auch nimmer so dynamisch ....und noch viel Spass dabei Goos Zitieren
Guybrush Threepwood Geschrieben 6. September 2002 Autor Geschrieben 6. September 2002 Ach so. Ok, nochmal vielen Dank du hast mir echt weitergeholfen. Gruß wasweißich:) Zitieren
idefix Geschrieben 6. September 2002 Geschrieben 6. September 2002 STL wäre was. vector zum Beispiel. Vorschlag #include <string> #include <vector> #include <iostream> using std::string; using std::vector; using std::cout; using std::endl; typedef vector<int> INTVEC; typedef vector<INTVEC> MATRIX; const INTVEC ROW(10,0); // 10 Zellen mit 0 init void ShowMatrix(MATRIX& m) { int i,j; for(i=0;i<m.size();i++) { for(j=0;j<m[0].size();j++) { cout<<m[j]<<","; } cout<<endl; } } int main(int argc, char* argv[]) { MATRIX m; m.resize(10,ROW); // Größe ändern m.push_back(ROW); //Neue Reihe //Vorsicht mit unterschiedlich großen Rows //Funzt aber der Zugriff //eigentlich eine eigene Matrix Klasse bauen m[0][0]=34; m[4][4]=67; printf("Hallo Welt!\n"); ShowMatrix(m); getchar(); return 0; } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.