Zeiger und wohin sie zeigen sollten
-
Hullo
ich würde gern eine zweidimensionelle Matrix auf Strukturen erstellen.
Leider schein ich das was falsch zu machen weil das Programm einfach nicht das tut was es ich will.aber ok.
Vielleicht kann mir das jemand an diesem Bsp erklären:
typedef struct struct1 { int i; int i2; } void main() { int i1=0,i2=0; struct1 ***matrix; /* Da fängsts schon mal an, wie muss die matrix eigentlich definieren? kann ich einfach*/ matrix=(struct1***)malloc(sizeof(struct1)*10*10); /* schreiben, oder doch*/ for(i1=0;i1<10;i1++) { for(i2=0;i2<10;i2++) { matrix[i1][i2]=(struct1*)malloc(sizeof(struct1)); } } /* weil wenn ich das zweitere verwende, dann bekomm ich immer die Fehlermeldung: matrix[i1][i2] wird verwendet bevor es deklariert wurde */ }
und abschließend wie kann ich dann alle Elemente wieder frei geben?
muss ich dann wieder mittels zwei for schleifen jedes element einzeln frei geben?thx, nehmt euch doch bitte die Zeit für eine Antwort
PS: der obrige Code soll nur ein Beispiel sein, also nicht sinvoll oder sogar
speicher sicher.
-
guggst du hier:
http://www.c-plusplus.net/forum/viewtopic.php?t=39489
-
ok ich verstehs (das FAQ http://www.c-plusplus.net/forum/viewtopic.php?t=39489)
ich hab mich etwas herum gespielt und das im moment so gelöst.
typedef struct struct1 { int i; int i2; } void main() { int i1=0,i2=0; struct1 ***matrix; matrix=(struct1***)malloc(sizeof(struct1**)); for(i1=0;i1<10;i1++) { matrix[i1]=(struct**)malloc(sizeof(struc1*)); for(i2=0;i2<10;i2++) { matrix[i1][i2]=(struct1*)malloc(sizeof(struct1)); } } }
Hat jemand dazu vielleicht was zu sagen, oder einen Verbesserungsvorschlag?
-
ja: vergiss malloc,new is viel einfacher
und dann so in etwa:struct struktur{ int i; int i2; }; //im main teil struktur*** matrix=new struktur**[10]; for(int i=0;i<10;++i){ matrix[i]= new struktur*[10] for(int i1=0;i1<10;++i1){ matrix[i][i1]=new struktur[10]; } } //am ende nich das delete vergessen
oder benutz am besten gleich vektoren, die sind nämlich ganz einfach zu handlen, und wirklich dynamisch
-
Wieso machst du eigentlich eine 3d-Matrix, wenn du nur eine 2d-Matrix brauchst?
-
Bashar schrieb:
Wieso machst du eigentlich eine 3d-Matrix, wenn du nur eine 2d-Matrix brauchst?
Wahrscheinlich eine Dimension für schlechte Zeiten. Man kann ja nie wissen...
-
otze schrieb:
//am ende nich das delete vergessen
for(int i=0;i<10;++i){ for(int i1=0;i1<10;++i1){ delete [] matrix[i][i1]; } delete [] matrix[i]; } delete [] matrix;