Frage zu gcc Compiler warning: '__cur' might be used uninitialized in this function



  • Hallo, ich mal folgendes Minimalbeispiel erstellt:

    #include <vector>
    #include <string>
    
    class B
    {
       public:
        std::vector<std::string> vect;
    };
    
    class A
    {
       public:
        std::vector<B> vec;
    
        void funktion()
        {
            B b;
            vec.push_back(b);
        }
    };
    
    int main()
    {
        A a;
        a.funktion();
    }
    

    Dabei bekomme ich mit dem gcc Compiler (CodeBlocks) eine Reihe Warnungen. Mit dem Microsoftcompiler (Visual C++ 2008) gibt es 0 Warnings.
    Die Warnungen beziehen sich alle darauf, dass zwei Variablen in den compilereigenen Dateien uninitialisiert benutzt werden könnten:

    warning: '__result' might be used uninitialized in this function
    
    warning: '__cur' might be used uninitialized in this function
    

    Diese Variablen befinden sich hier

    `std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = std::string, _Alloc = std::allocator<std::string>]'
    

    und hier

    `void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = B, _Alloc = std::allocator<B>]'
    

    Kennt sich jemand mit dem gcc compiler aus und kenn diese Warnung oder hat eine Idee, woran das liegen könnte? Was muss ich machen, um keinen Fehler zu erzeugen?

    Schonmal Danke für alle Anregungen!



  • edit: Wenn ich vect als std::vector<int> definiere (also int statt std::string) erscheinen die Warnings nicht Oo
    Ich bin mit meinem Latein am Ende...



  • gccError schrieb:

    Ich bin mit meinem Latein am Ende...

    Da kannst du nichts dagegen machen. Das ist ein Bug in den Windows-Portierungen des gcc. Einfach ignorieren. Oder, weil es ja wirklich nervt, diese spezielle Warnung in den Build-Optionen des Projekt ausschalten:

    -Wno-uninitialized
    


  • Bei mir läuft der Code fehlerfrei mit CodeBlocks 😕



  • Welcher Compiler?



  • FreakY<3Cpp schrieb:

    Bei mir läuft der Code fehlerfrei mit CodeBlocks 😕

    Wenn du gcc verwendest kann es noch sein, dass der Fehler nicht auftaucht, weil du als "Build Target" "Debug" eingestellt hast und dadurch nicht optimiert wird. Dann funktioniert die Warnung -Wuninitialized nämlich nicht.



  • Ich hab nix umgestellt...Mein CodeBlocks ist noch so wie am 1. Tag 🙂



  • FreakY<3Cpp schrieb:

    Ich hab nix umgestellt...Mein CodeBlocks ist noch so wie am 1. Tag 🙂

    Aha. Na dann ... 😃

    Jedenfalls gilt auch bei dir, wenn du mit dem gcc und den Compiler-Schaltern -Wuninitialized und -O (oder -01, -02, ...) kompilierst (bei Code::Blocks ist das für den Release-Mode voreingestellt), dann kommen diese Warnungen. Würde mich schon sehr wundern wenn nicht. Wir reden hier, wie gesagt, aber nur von Windows.


Anmelden zum Antworten