Fehler cor return



  • Hallo.
    Ich habe mal wieder ein Problem, ein sehr Verwirrendes.

    void B::Release()
    {
    Log("Anfang von B.Release()");
    RäumeAuf();
    Log("Ende von B.Release()");
    }
    
    int main()
    {
    A.Init();
    B.Init();
    
    Machwas();
    
    A.Release();
    B.Release();
    
    return 0;
    }
    

    in der Logdatei (bzw. in der Konsole) sind die letzten Zeilen:
    "Anfang von B.Release()" und "Ende von B.Release()"
    Danach steht nur noch "return 0", aber ein Fehler tritt auf.
    Da frage ich mich doch, wie zwischen "B.Release()" und "return 0" noch ein Fehler sein kann?
    Er meint übrigens, dass es ein Seitenfehler im Modul NVOpenGL32.dll ist.
    Danke



  • dein fehler ist komplexer als du ihn darstellst.



  • What we need:

    verwendeter Compiler
    Debugger-Meldung
    Source Code - komplett



  • komplett heisst http://c-plusplus.net/forum/viewtopic-var-t-is-136013.html

    komplett != code zippen und abladen



  • Erstmal ist das bestimmt kein C-Quellcode, sondern eher C++ (wenn überhaupt). Und zweitens ist der Code (und die Fehlermeldung) zu unvollständig, um irgendetwas diagnostizieren zu können.
    (nur so viel - nach dem "return 0;" werden noch die nagelegten Objekte freiegegeben - und vermutlich kracht es da in einem der Destruktoren)



  • Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Na, der Fehler tritt halt erst am Ende des Programms auf.
    Es stürzte aber nur ab, wenn die Funktion LoadTextureFromMemory aufgerufen wurde, also habe ich dann soweit geändert, dass es läuft, ist aber ganz schön merkwürdig:

    bool TextureManager::LoadTextureFromMemory(std::string Name, ushort Width,ushort Height,
    ushort BytesPerPixel,uchar* Data)
    {
        uint* TexID = new uint;
        KImage Img;
        int Format;//GL_RGBA oder GL_RGB
    
        if(Name == "")
          return false;
    
        if     (BytesPerPixel == 4) Format = GL_RGBA;
        else if(BytesPerPixel == 3) Format = GL_RGB;
        else return false;
    
        Img.Width = Width;
        Img.Height = Height;
        Img.Name = Name;
    
        glGenTextures(1,&Img.TexID);
        glBindTexture(GL_TEXTURE_2D,Img.TexID);
    
        IntToStr(Img.TexID);
    
        Textures.push_back(Img);
    
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
    
        gluBuild2DMipmaps(GL_TEXTURE_2D,BytesPerPixel,Width,Height,
                          Format,GL_UNSIGNED_BYTE,Data);
    
        delete TexID;
        return true;
    }
    
    std::string IntToStr(int Int)
    {
        char Ret[32];
        sprintf(Ret,"%i",Int);
        return (std::string)Ret;
    }
    

    Die drei Zeilen
    -uint* TexID = new uint;
    -IntToStr(Img.TexID);
    -delete TexID;
    sind zwar absolut unsinnig, aber sobald ich eine davon lösche, krachts wieder am Ende.
    Nochmal: Der Fehler passiert nie zur Laufzeit, immer erst vor der Allerletzten Anweisung "return 0".
    Ich habe absolut null Ahnung was da los ist.



  • Hrmpf! schrieb:

    Nochmal: Der Fehler passiert nie zur Laufzeit, immer erst vor der Allerletzten Anweisung "return 0".

    Das ist zur Laufzeit. Hast du irgendwelche globalen oder statischen Objekte? Dann schau doch mal in deren Destruktoren.

    Ich habe absolut null Ahnung was da los ist.

    Dann wäre es jetzt wohl an der Zeit, mal den Debugger zu benutzten und sich Ahnung zu verschaffen.

    Alternativ kannst du auch hier ein Minimalbeispiel zeigen, das den Fehler reproduziert.



  • Ich glaube ich habs.
    Kann sein,dass Container erst an dieser Stelle, also direkt vor "return 0" gelöscht werden?
    Da ist dann wahrscheinlich der Fehler.


Anmelden zum Antworten