Problem mit Zeiger



  • Hallo liebe Community

    Ich hab ein Problem bei der Übregabe eines Zeigers in eine Funktion

    Ich erstelle mir nen Zeiger auf mein Array und übergebe das an eine Funktion:

    double* x = new double[G.vertexnum]
    m_Matrix->solve( x, bx );
    

    Die Funktion startet dann wie folgt:

    void LUdecomp::solve( double x[], const double b[] ) const
    {
        double* y = x;
        for ( int i = 0; i < n; i++ )
           y[i] = b[i];
        ....
    

    Allerdings bricht er schon im ersten Schleifendurchlauf ab. Was muss ich ändern? Ich dachte eigentlich, dass der Speicherbereich für x reserviert ist und y zeigt doch eigentlich auch dorthin oder?

    Grüße
    Neron



  • Und wo hast du die Variable "n" definiert?

    Und muss man y[i] = b[i]; nicht in {} Klammern setzen?



  • Für deine Schleife kannst du memcpy() benutzen.

    double* y = x;
        memcpy(y, b, sizeof(double) * n);
    

    Ansonsten, was ist n ?



  • Sorry, ich hab die anderen Variablen nicht weiter erklärt, da ich weiß, dass der Fehler bei x bzw. y liegt. n ist die Ordnung der Matrix, die ich zerlege und stimmt mit der Ordnung der Vektoren x,y, und b überein.



  • Tobi3000 schrieb:

    Und muss man y[i] = b[i]; nicht in {} Klammern setzen?

    Nein, muss man nicht, so lange nur eine Anweisung in der for-Schleife ausgeführt. Erst ab mehreren Anweisung ist ein Block notwendig.

    @DEvent: Deine Methode funktioniert leider nicht, schmiert mir auch hier wieder ab.

    Muss ich den Speicherplatz für y neu anlegen? Ist ja eigentlich nur n Zeiger, der auf nen bereits definierten Speicherplatz zeigt... Hm, ich versteh's nicht 😞



  • DEvent schrieb:

    Für deine Schleife kannst du memcpy() benutzen.

    double* y = x;
        memcpy(y, b, sizeof(double) * n);
    

    Ansonsten, was ist n ?

    ) 😉


Anmelden zum Antworten