Pointer Problem!



  • Hallo allerseits,

    ich habe folgendes Problem, hier der Code:

    int main(int argc, const char * argv[]) {
    
        double s = 1;
        double mu = 4;
    
        compute1DGaussian head;
        double * versuch[10];
    
        for (int i = 0; i < 9; i++) {
    
            double temp = head.gauss(i, s, mu);
            versuch[i] = &temp;
            std::cout << *versuch[i] << std::endl;
    
        }
    
        std::cout << *versuch[0] << std::endl;
        std::cout << *versuch[1] << std::endl;
        std::cout << *versuch[2] << std::endl;
        std::cout << *versuch[3] << std::endl;
    
        return 0;
    
    }
    

    Der Code tut folgendes: für eine Standardabweichung und einen Mittelwert berechnet mir die Methode gauss die 1D-Gaussverteilung.
    Mein Problem ist nun folgendes: Wenn ich mir die Werte innerhalb der Schleife ausgeben lasse, ist alles korrekt, die Werte passen. Mache ich das allerdings außerhalb der Schleife, gibt mir das Programm immer nur den einen gleichen Wert raus, was kann da schief laufen? Ich bin leider nicht drauf gekommen, könnt ihr mir helfen?

    Vielen Dank und Gruß!


  • Mod

    Die Überschrift ist schon richtig: Die Pointer sind dein Problem. Lass alle Pointer weg und dein Problem löst sich von alleine.



  • Ich weiß schon, dass das auch mit Arrays geht, allerdings will ich nur verstehen, warum es in der Schleife geht und außerhalb nicht.
    Ich will mich gerade mit den Pointern etwas "anfreunden" 🙂
    Gruß



  • Du benutzt ein Array!

    Wie lange lebt temp? Wie lange ist die Adresse von temp gültig?



  • Tja, da sieht man vor lauter Bäumen den Wald nicht mehr, danke! Habe es jetzt zum Laufen gebracht, wie ich es wollte.
    Gäbe es denn eine Möglichkeit, mein Vorhaben mit Pointern zu realisieren?
    Ich denke nämlich, dass ich das Konzept von Pointern noch nicht ganz verstanden habe.
    Gruß



  • Ja man könnte das auch mit Pointern machen. Da Pointer auf lokale Variablen die Pointer auch nur solange auf etwas sinnvolles zeigen wie die lokale Variable existiert muss man den Speicher dynamisch mit new reservieren und nach gebrauch wieder mit delete freigeben. Eine gute Übung um mit Pointern umzugehen ist eine Linked List mit einer Funktion zum Werte einfügen und entfernen zu programmieren. Der nächste Schritt wären dann Smart Pointer, um das manuelle freigeben des Pointers zu automatisieren.


Anmelden zum Antworten