Matrix reservieren
-
Guten Abend! (:
Ich möchte ein Programm schreiben welches mir mit der Funktion reservieren eine x Zeilen y Spalten große Matrix reserviert und möchte diese dann beschreiben. Nach stundenlangen probieren mit Zeigern, Zuordnungen und anderem wende ich mich nun an euch. Hier drucke ich den Code ab:#include <iostream> #include <iomanip> using namespace std; template <typename T> void einlesen(T **feld, int zeilen, int spalten) { for(int i=0; i<zeilen; i++) { cout<<"Bitte "<<zeilen<<". Zeile der Matrix eingeben: "<<endl; for(int j=0; j<spalten; j++) { cin>>feld[i][j]; } } } template <typename T> void reservieren(T **feld, int zeilen,int spalten) { feld= new T*[zeilen]; for(int i=0; i<zeilen; i++) { feld[i] = new T[spalten]; } }
Das waren die Funktionen, nun kommt meine main darunter
int main() { int zeilen, spalten; cout <<"Anzahl Zeilen: "; cin >> zeilen; cout <<"Anzahl Spalten: "; cin >> spalten; int **Mi; reservieren(Mi, zeilen, spalten); einlesen(Mi, zeilen, spalten);
Die main durfte laut Aufgabe nicht verändert werden und die Matrix muss auch double (oder andere) einlesen können, daher das template. Ich benutze C++ 11.
Achja, als Fehler bekomme ich immer ein Segmentation Fault.
Ich hoffe ihr könnt mir helfen
MfG
Oli
-
Guck dir Zeile 23 an. Dein genewter Speicher wird auch nirgends deletet. Bei sowas sind Dinge wie std::vector das richtige.
-
Ich denke, Du bist schon ziemlich dicht an dem, was von Dir als Lösung erwartet wird.
Allerdings müsstest Du
Mi
ausmain()
verändern. Also eine Referenz nehmen:template <typename T> void einlesen(T **&feld, int zeilen, int spalten); template <typename T> void reservieren(T **&feld, int zeilen,int spalten);
-
Furble Wurble schrieb:
Ich denke, Du bist schon ziemlich dicht an dem, was von Dir als Lösung erwartet wird.
Allerdings müsstest Du
Mi
ausmain()
verändern. Also eine Referenz nehmen:template <typename T> void einlesen(T **&feld, int zeilen, int spalten); template <typename T> void reservieren(T **&feld, int zeilen,int spalten);
Bei der einlesen Funktion ist die Referenz eigentlich nicht nötig, da der
feld
Pointer gar nicht verändert wird.
-
sebi707 schrieb:
Bei der einlesen Funktion ist die Referenz eigentlich nicht nötig, da der
feld
Pointer gar nicht verändert wird.Stimmt auffällig. (Bitte keine "const ref auf const Zeiger auf..."-Witze hier einfügen!)