Importer:Error:WasEmpty
-
Hallo ihr Lieben,
in meinen Hausaufgaben stehe ich gerade vor folgendem Problem:
Erstmal die Aufgabenstellung:
"Überladen Sie operator[] der Matrix-Klasse gemäß double* operator[](int i), so dass die jeweilige Zeile v[i] der Matrix in Form eines Arrays (Zeiger!) zurückgegeb en wird. Auf dieses kann dann wiederum mit einem Index zugegrien werden; insgesamt liefert der Aufruf von m[i][j] dann ein einzelnes Element in Zeile i, Spalte j der Matrix m."In der Variante, die keinen Compilierungsfehler produziert, erscheint beim Ausführen des Programms "Speicherzugriffsfehler (Speicherabzug geschrieben)".
Hier noch mein derzeitiger Code (sinnvoll gekürzt):
#include <iostream> #include <cmath> using namespace std; class Matrix { private: double v[3][3]; public: Matrix() { for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) v[i][j] = 0; } } Matrix(const double aIn[3][3]) { for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) v[i][j] = aIn[i][j]; } } double* operator[](const int i) { double *a[3]; for (int j = 0; j < 3; ++j) *a[j] = v[i][j]; //return a; } int main() { const double a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Matrix m(a); cout << m[1][1] << m[2][1] << m[3][1] << endl; // muesste "1 4 7" ausspucken }
In einer anderen Variante wird der Speicherort der Variable angegeben (0x98236)
Könnt ihr vielleicht meinen Denk-/Programmierfehler finden?Vielen Dank!
Grüße,
BastiPS: Ich arbeite momentan mit Ubuntu 12.04 LTS und GCC.
-
Arrays fangen bei 0 an.
edit: Und noch viel mehr. Du gibst gar nichts aus operator[] zurück. Und die auskommentierte Rückgabe gibt einen Zeiger auf eine (nicht mehr existierende) lokale Variable zurück.
-
SeppJ schrieb:
Arrays fangen bei 0 an.
edit: Und noch viel mehr. Du gibst gar nichts aus operator[] zurueck. Und die auskommentierte Rueckgabe gibt einen Zeiger auf eine (nicht mehr existierende) lokale Variable zurueck.
Genau, und deshalb:
double* operator[](const int i) { return &v[i][0]; }
- osdt
-
@ SeppJ
Ersteres ist richtig und habe ich natürlich sofort geändert.
Die Speicherüberlaufmeldung kam aber trotzdem noch.@osdt
Dein Code macht genau das was ich will, obwohl ich überrascht bin, da ja &v[i][0] da steht und ich aber manchmal auch gern das zweite Element hätte. Dieses kommt aber wie gefordert, deshalb DANKE, auch wenn ich nicht verstehe, wieso das klappt.Grüße,
BastiPS: Wieso funktioniert die Vorschaufunktion nicht? Da erscheint nur erneut dieses (Schreib-)Fenster, der Text ist weg und nur mit zurück wieder zu holen.
-
Holzbasti schrieb:
PS: Wieso funktioniert die Vorschaufunktion nicht? Da erscheint nur erneut dieses (Schreib-)Fenster, der Text ist weg und nur mit zurück wieder zu holen.
Es gab neulich ein Notfallupdate der Forensoftware. Einiges funktioniert noch nicht wie gewohnt.