Über die Elemente eines Vektor-Zeigers iterieren



  • Hi zusammen,

    ich habe eine Methode, die mir durch

    std::vector<...>* myFunction()
    {
        std::vector<...> myVector;
        return &myVector;
    }
    

    einen Zieger auf ein stl-Vektor zurückgibt.

    Jetzt möchte ich an einer anderen Stelle mit

    std::vector<...>* myVector = myFunction();
    for ( std::vector<...>::iterator it = myVector->begin(); it != myVector->end(); ++it )
    {
        ...
    }
    

    über die Elemente des Vektors iterieren. Leider erhalte ich da einen Segmentation Fault. Woran könnte das liegen?

    Wäre für jeden Hinweis dankbar...



  • Beim verlassen der Funktion existiert der zurückgegebene Vektor nicht mehr. Somit hast Du illegale Speicherzugriffe.

    Entweder den Vector als parameter übergeben oder in der Funktion mit new zurück geben, dann aber ans löschen denken!!! (auto_ptr ?)

    Am besten als ref an die Funktion übergeben die damit was machen soll. Dann muss der aufrufer sich um den Vektor kümmern.



  • std::vector<...> myFunction()
    {
        std::vector<...> myVector;
        return myVector;
    }
    
    // ...
    
    std::vector<...> myVector = myFunction();
    for ( std::vector<...>::iterator it = myVector.begin(); it != myVector.end(); ++it )
    {
        ...
    }
    


  • Beim verlassen der Funktion existiert der zurückgegebene Vektor nicht mehr. Somit hast Du illegale Speicherzugriffe.

    Okay, mein Fehler. Ich glaube nicht, dass das Problem hier liegt, denn die Methode gibt im tatsächlichen Code einen Zeiger auf einen Vektor zurück, der nicht-öffentliches Mitglied der Klasse ist, der auch die Methode selbst angehört. Die entsprechende Instanz dieser Klasse müsste aber schon noch im Speicher existieren.



  • Wie sieht denn dein Code tatsächlich aus? Und bist du sicher dass der vector das Problem ist?


Anmelden zum Antworten