[C++] Problem mit mehrdimensionalem Array

Yupa

Grünschnabel
Hallo,

ich möchte ein mehrdimensionales Array erstellen, leider sind bisher alle meine Versuche gescheitert.
Die folgenden Varianten habe ich schon probiert:
Code:
double *cameraMatrix;
...
cameraMatrix = new double[3][3];

und

double *cameraMatrix;
...
cameraMatrix  = new double[3];
for(i=0;i<3;i++)
	cameraMatrix[i] = new double[3];

usw.

Vielleicht kann einer von euch mir bei diesem Problem helfen.

Besten Dank im vorraus.

MfG Andre
 
Versuch mal das:
Code:
double *cameraMatrix  = new double[3*3];
So werden die neun nötigen Doubles reserviert. Du kannst aber trotz dieser Form der Allozierung mit beispielsweise cameraMatrix[2][2] das mittlere Element ansprechen.

Übrigens, beim Freigeben delete[] verwenden (die Array-Form) und nicht delete . Macht zwar bei double keinen Unterschied, kann aber gefährlich werden bei komplexeren Datentypen.
 
Zuletzt bearbeitet:
Erstmal danke für deine Antwort.
Zwar scheint das allokieren jetzt zu funktionieren, aber mit dem Zugriff habe ich Probleme.
Ich fülle meine Array folgendermaßen:

cameraMatrix[0][0] = fc[0];
cameraMatrix[0][1] = 0.00;
cameraMatrix[0][2] = 0.00;
...

und bekommen diese Fehlermeldung :

invalid types `double[int]' for array subscript

,für jede oben angeführte Zeile.

MfG Andre
 
Ups, da hast du recht - da habe ich nicht aufgepasst.

Probiere das mal so:
Code:
double **cameraMatrix  = (double**)(new double[3*3]);
 
Sorry, aber ich hätte noch eine Frage.
Gibt es etwas bei den Index zu beachten? Ich kann zwar jetzt das Array füllen mit

cameraMatrix[0][0] = fc[0];
cameraMatrix[0][1] = 0.00;
cameraMatrix[0][2] = 0.00;

cameraMatrix[1][0] = fc[0]*alph_c;
cameraMatrix[1][1] = fc[1];
cameraMatrix[1][2] = 0.00;

cameraMatrix[2][0] = cc[0];
cameraMatrix[2][1] = cc[1];
cameraMatrix[2][2] = 1.00;

,aber bei der Ausgabe dieser Werte sind

cameraMatrix[0][0] = fc[0];
...
und

cameraMatrix[1][0] = fc[0]*alph_c;
...

jeweils identisch, d. h. Ersteres nimmt den Wert der zweite Zeile an.

Der einzige Trost , der letzte Block bleibt mir dabei erhalten, so wie ich in haben wollte.

Gruß Andre
 
Ich habe es hin bekommen.
Den Speicher allokiere ich nun aber so:
Code:
    int i;
    cameraMatrix = new double *[3];
    for(i=0;i<3;i++){
	cameraMatrix[i] = new double[3]; 
    }

und fülle das Array wie ob angegeben.
Ich glaube das es sich anbietet einen neuen Type einzuführen, myMatrix, oder so. Da ich wahrscheinlich im Code öfters Matrizen brauche.
Also, noch mal vielen Danke.

Gruß Andre
 
Da du ja mit C++ arbeitest, könntest du auch mal std::vector oder noch besser (für mehrdimensionale) boost::multiarray. Das bekommst du bei http://www.boost.org. Ist aber nicht ganz einfach, dazu den Zugang zu finden. Will sagen: Es ist ein bisschen knifflig.
 
Zurück