Veröffentlicht 6. September 200223 j 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
6. September 200223 j 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
6. September 200223 j 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?
6. September 200223 j Autor 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.
6. September 200223 j 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
6. September 200223 j Autor 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.
6. September 200223 j 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
6. September 200223 j Autor 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][?]
6. September 200223 j 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
6. September 200223 j Autor 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!!!!
6. September 200223 j 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
6. September 200223 j Autor Ach so. Ok, nochmal vielen Dank du hast mir echt weitergeholfen. Gruß wasweißich:)
6. September 200223 j 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; }
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.