Anfängerfehler: Doppelzeiger



  • Sorry, ich hab keine Ahnung, wie ich das folgende zum Laufen bringen kann. Dabei will ich nur eine Funktion schreiben, die eine Matrix zurückliefert:

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    double** foo() {
      double matrix[10][3];
    
      for(int i = 0; i < 10; i++)
      for(int j = 0; j < 3; j++)
      {
         matrix[i][j] = 87*i+26*j;
      }
      return matrix;
    }
    
    int main()
    {
      double** matrix = foo();
      return 0;
    }
    

    Bin für sachdienliche Hinweise sehr dankbar.



  • So, wie das dort ist, kann es nicht funktionieren, weil du einen Zeiger auf ein lokales Objekt der Funktion zurücklieferst. Du müsstest den Speicher dynamisch in einer Schleife alloziieren und später im Programm wieder freigeben. Mehrdimensionale Arrays sind aber generell irgendwie ne komische Sache, machen nur Ärger.



  • @MatthiasK: Außerdem ist (wie von Hume heute schon einmal erklärt) ein Ein Zeiger auf das erste element eines Zweidimensonalen Arrays vom Typ T kein T** sondern ein (*)[x], wobei x die zweite Dimension angibt. Siehe dazu auch in der C++FAQ... (multidimensionale Arrays o.ä.)

    Gruß Caipi


Anmelden zum Antworten