(Sorry, Code zitieren ist hier die Pest, und ohne macht der
Rest auch keinen großen Sinn…)
Was meinst Du ?
pointerA = &matrixA[dim][dim];
Dir ist schon klar, dass du damit einen Zeiger auf den Stack
hinter das Ende von matrixA anlegst?
Jetzt wo Du’s sagst schon. pointerA=&matrixA wäre sinnvoller, oder?
pointerA hat den Typ „double*“. Durch den ersten []-Operator
bekommst du ein double, auf das du nicht mehr als Array
zugreifen kannst. Versuch es mal mit „double** pointerA“.
Werde ich versuchen.
Außerdem wird dein Code einen langsamen, grausamen Tod
sterben, weil der Allokation nach nur ein großes Array
existiert, so dass nach der ersten Dereferenzierung mit
größter Wahrscheinlichkeit kein gültiger Zeiger da stehen
wird.
Ich bin nicht ganz sicher, was das heißt und was ich tun muss, um dieses Problem zu umgehen. Ist nicht jedes mehrdimensionale Datenfeld einfach ein riesig langes Array?
Was du meintest, war:
double *pointerA[dim];
for( int i=0; i
Außerdem: Mehrdimensionale Arrays sind in dieser Situation aus
genau dem Grund nicht wirklich lustig. Du kannst bei einem
halbwegs brauchbaren optimierenden Compiler (also mit
praktisch jedem spätestens ab der Jahrtausendwende…) ohne
große Verluste ein eindimensionales Array kapseln:
double* Matrix;
/* eindimensional allokieren wie gehabt */
/* Zweidimensionalen Index in eindimensionalem Array berechnen
*/
inline int _mi( int zeile, int spalte ) {
return zeile*dim + spalte;
}
/* zugriff: */
…
double foo = Matrix[_mi(r,c)];
…
Das ist meiner Erfahrung nach nicht wirklich langsamer als der
„echte“ zweidimensionale Weg, aber vom Standpunkt der
Speicherverwaltung aus wesentlich einfacher.
Klingt gut. Wenn ich die Wahl hätte, würde ich es wohl nach diesem Vorschlag lösen. Leider gibt es schon einige Vorgaben im Programm, und dazu gehört die Struktur der MatrixA. Daran werde ich also nichts ändern können, wenn ich nicht einige hundert Zeilen Quelltext umwerfen möchte. Auf meinem Mist gewachsen ist nur MatrixC, die Pointer und die Transponierung.
Über welchen Ansatz kann ich denn mit Pointern und mehrdimensionalen Arrays arbeiten? Vielleicht kennt jemand eine Seite, wo man das übersichtlich präsentiert bekommt.
Richtig schön wird es sowieso erst mit C++ und ein paar
überladenen Operatoren.
Vielen Dank, aber ich bin auch so schon bedient
thx
moe.