mehrdimensionales feld als rückgabewert



  • hi leute,

    folgendes problem:
    ich will eine funktion schreiben, die zwei strings übernimmt und ein mehrdimensionales array mit breite und länge der strings erstellt und zurückgibt.

    die schnittstelle möchte ich wie folgt gestalten:

    int[][] createTable(string const s, string const t) {
       int table[s.length()][t.length()];
       return table;
    }
    

    leider funktioniert der spaß hinten und vorne nicht. vorschläge?



  • Hi!

    Als Rückgabewert geht das nicht. Eine Möglichkeit: einen Zeiger auf das Feld an die Funktion übergeben und darüber auf das Feld zugreifen um es zu füllen.
    Hat den Vorteil, daß innerhalb der Funktion kein Speicher reserviert wird und man damit auch nicht vergessen kann, daß er in der übergeordneten Funktion wieder freigegeben werden muß.

    Gruß



  • Mal abgesehen davon geht

    int table[s.length()][t.length()];
    

    auch nicht



  • int **createMatrix(const string &s1, const string &s2) {
      size_t rows = s1.size(), cols = s2.size();
      int **arr = 0;
      arr = new int*[rows];
    
      for (size_t i=0;i<rows;++i)
        *(arr+i) = new int[cols];
    
      return arr;
    };
    

    (Kann es sein, dass sich Fragen dieser Art in letzter Zeit häufen?)



  • GPC irgendwie schon. Aber bei deiner lösung muss man auch darauf achten dass das multi-dim. array auch 1. Richtig und 2. überhaupt gelöscht wird.



  • Na ja, dann habe ich wenigstens nicht als einziger das Gefühl gehabt...

    void killMatrix(int **mat, size_t rows, size_t cols) {
      for (size_t i=0;i<rows;++i)
        delete [] *(mat+i);
    
      delete [] mat;
      mat = 0;
    };
    


  • Oder man baut sich eine Klasse drumherum, die das reservieren/löschen übernimmt (und sich am besten auch die Größe merkt).



  • oder man spart sich den ärger und nimmt gleich shared_ptr< vector< vector< int > > >
    😛

    //Edit wobei der zugriff net so toll ist ( ehrlich gesagt ) *g*



  • Proxies oder Expression Templates 🤡
    Letztere nerven aber beim tippen 😉


Anmelden zum Antworten