dynamische matrix



  • hi. ich habe eine dynamische matrix von char zeichen.
    0. zeile 1 zeichen lang
    1. zeile 2 zeichen lang
    2. zeile 3 zeichen lang usw.
    kompilieren kann ich sie mit visual c++
    hier mal der code:

    #include"head.h"
    #include<iostream>
    #include<cstdlib>
    using namespace std;
    
    void matrix::matrix_erstellen() {
        int i,j;
        int zufallszahl;
        cout<<"Wieviele Zeilen soll das Array haben? ";cin>>zeilenzahl;
        zeilenzahl--;
        char** pMatrix = new char*[zeilenzahl];
        for(i=0;i<=zeilenzahl;i++) { pMatrix[i] = new char[i+1]; }
        for (i=0;i<=zeilenzahl;i++) {
            for (j=0;j<=i;j++) {
                zufallszahl = 33+(rand() % 93);
                pMatrix [i][j] = static_cast<char>(zufallszahl);cout<<pMatrix[i][j];
            }
        }
        cout<<"\nMatrix wurde erfolgreich erstellt.\n";   
    }
    
    void matrix::matrix_ausgeben() {
        int i,j;
        char wert;
        if(pMatrix!=NULL) cout<<"Matrix ist nicht leer!";
        cout<<"\nZeilenzahl: "<<zeilenzahl;
        for (i=0;i<=zeilenzahl;i++) {
            for (j=0;j<=i;j++) {
            cout<<pMatrix[i][j];
            }
            cout<<endl;
        }
    }
    
    void matrix::matrix_elementaendern() {
        cout<<"mal sehen ob der rest funktioniert!";
    }
    

    die methode matrix_erstellen() funktioniert auch einwandfrei. und wenn ich die ausgabe schleife(n) direkt in die matrix_erstellen() funktion reinschreibe funktioniert diese auch noch.
    wenn ich die ausgabe in der funktion matrix::matrix_ausgeben() reinschreibe, so wie es in dem code oben ist dann kommt immer wenn die mmatrix::matrix_ausgeben() aufgerufen wird ein windows fehler: matrix.exe hat ein problem und muss beendet werden...
    ich hab mit // rumprobiert und rausbekommen dass es an der zeile:

    cout<<pMatrix[i][j];
    

    liegt. warum ist das so`? thx



  • Benutz in den Schleifen ein < und nicht ein <= sonst läufst du über den alloziierten Speicher hinaus. Hab ich dir im MFC-Forum aber schon einmal gesagt.



  • der fehler kommt auch wenn ich < anstatt <=schreibe.
    wenn ich den ausgabe code in die matrix_erstellen methode zum testen reinkopiere funktioniert er ja.
    nur in der matrix_ausgeben funktioniert der gleiche code nicht. das ist ja das komische ???



  • Hast du keinen Debugger? Poste doch wenigstens mal den Fehler der gemeldet wird!



  • void matrix::matrix_erstellen()
    ...
    char** pMatrix = new char*[zeilenzahl];
    ...;

    Hier legst du eine lokale pMatrix variable an die hat nichts mehr mit deiner pMatrix in der klasse zu tun! Wenn muesstest du sie schon als Rückgabewert zurückgeben! ansonsten gibt es deine pMatrix die du hier lokal angelegt hast nur in dieser methode und nicht ausserhalb!!

    schreib halt einfach:

    void matrix::matrix_erstellen()
    ...
    pMatrix = (char**)new char[zeilenzahl];
    ...;

    dann muesste es fkt!



  • danke friend; jetzt funzt es.
    mfg onlythelonely


Anmelden zum Antworten