pointer mit dynamischem speicher



  • Hallo,

    Hab folgendes Problem

    in einer Methode allokier ich dynamisch speicher für ein double array
    ich möchte aber in einer anderen methode auf das double array zugreifen können.
    und zwar in dem ich in der anderen methode eine funktion aufruf also net durch den
    Rückgabewert.

    also ruf ich die Methode auf in der das array ist und will mir nur den Zeiger auf das array kopieren
    und dann eben auf die elemente im array zugreifen...

    leider bekomm ich immer den fehler segmentation error.

    Ich mein wahrscheinlich ist der Speicher dann nicht mehr gültig nur warum funktioniert es dann mit return ????? (hab das testweise eingebaut mit der variablen versuch)

    kann mir jemand sagen warum und was ich falsch mach danke

    markus

    double* Dev2;
    double *param;
    
    double* versuch;
    
    double* checkparameter(double* param)    
    {
      Dev2= new double[29];  
      Dev2[3]=7;
      param=Dev2;
    
      return Dev2;
    }
    
    int main ()
    {
      versuch=checkparameter(param);
      cout <<"param"<<versuch[3]<<endl; //das funktioniert einwandfrei
    
      cout <<"param"<<param[3]<<endl; //hier kommt segmentation error warum???
      return 0;
    }
    


  • Hm, das Rückgabe funktioniert, ist klar.
    Den Pointer aber übergibst du imho per value,
    du müsstest evtl. mal folgendes Konstrukt ausprobieren:

    double* checkparameter(double*& param);
    


  • Funktionier danke!!!

    nur warum???
    ich versteh das nicht ich übergeb doch mit dem "*double" ein pointer weise diesem pointer den anderen dynaisch erzeugten Pointer zu ( param=Dev2;)

    wozu dann den Adressen Operator???



  • Auch Pointer werden im normal zustand per value übergeben,
    dh. von den änderungen an dem Pointer bekommt dein ursprünglicher
    Pointer garnix mit. Das & macht aus dem Pointer eine Referenz
    auf einen Pointer.



  • Die lokale Variable param überdeckt die globale Variable unsichtbar!



  • FireFlow schrieb:

    Die lokale Variable param überdeckt die globale Variable unsichtbar!

    Das ist richtig. Du solltest vielleicht drüber nachdenken eine Art von Notation zu verwenden. ich benutze zum Beispiel für globale generell g_ als Prefix, für Parameter , für KlassenMitglieder immer m. Glaub mir, du ersparst Dir dadurch ne Menge Ärger. 🙂
    rya.
    Scorcher24


Anmelden zum Antworten