W
Vorbemerkungen
überleg dir die Sprache. Insbesondere die vielen Pointer und Doppelpointer sehen eher nach C als C++ aus.
ein double** ist kein 2d-Array, sondern du hast hier einen Pointer (bzw. einen Pointer, der möglicherweise auf ein 1d-Array zeigt) auf Pointer. Damit sind deine Daten NICHT hintereinander im Speicher. Du hast die Pointer für die Zeilen alle hintereinander im Speicher und die Zeilenendaten innerhalb je einer Zeile sind hintereinander, aber es ist nicht sichergestellt, dass die 2 Zeilen hintereinaner liegen. In der Regel ist es besser (effizienter und auch einfacher zu programmieren), einen großen Speicherbereich für die gesamte Matrix zu haben und die Position mit zeile * nSpalten + spalte zu errechnen.
du hast viele allocate2d-Calls, aber ich sehe kein delete in deinem Code, d.h. du hast Speicherlecks.
das ist kein vollständiges Programm, wir können es also nicht einfach so testen
Wie solltest du vorgehen:
stelle sicher, dass du keine globalen Variablen verwendest. Insbesondere scheint posMTrillatASize global zu sein. Warum aber sollte eine Funktion wie multiplyMatrices davon abhängen? Matrix*Matrix sollte unabhängig davon sein und mit jedem Paar von Matrizen funktionieren, die größenkompatibel für Multiplikation sind, d.h. Anzahl Spalten der linken = Anzahl Zeilen der rechten Matrix.
stelle für jede einzelne Funktion sicher, dass sie wie gewünscht funktioniert. Dazu schreibst du am besten Tests. Für das transpose2DimMatrix könntest du z.B. eine Matrix (123456)\left(\begin{array}{cc}1&2\\3&4\\5&6 \end{array}\right)⎝⎛135246⎠⎞ reingeben und sicherstellen, dass (135246)\left(\begin{array}{cc}1&3&5\\2&4&6\end{array}\right)(123456) rauskommt. Und so weiter. Dann machst du noch ein paar weitere Tests, z.B. für 1-zeilige oder 1-spaltige Matrizen. Je mehr verschiedene Tests, desto besser. Diese Tests schreibst du als Code, sodass du sie jederzeit wiederholen kannst.
wenn du sicher bist, dass die einzelnen Funktionen korrekt sind, dann stelle sicher, dass die Kombination auch passt.