Probleme beim debuggen



  • Hallo

    Ich würde gerne noch einmal meine Frage vom letzten Post wiederholen. Ich habe nun noch einen Kopüierkonstruktor hinzugefügt und ich habe immernoch das selbe, oben beschriebene, Problem.

    chrische



  • Elemente für einen std::ector müssen Copyconstructable sein.
    du must im CCtor auch den inhalt des Pointers auf dein Image kopieren.
    http://www.cs.wisc.edu/~hasti/cs368/CppTutorial/NOTES/CLASSES-PTRS.html



  • Hallo

    Ich bin mir nicht sicher, ob mein Copyconstructor richtig ist, weil ich sowas noch nie geschrieben habe, also zeige ich ihn Euch mit der Bitte mir den Sand aus den Augen zu waschen.

    CSprite::CSprite(const CSprite& rhs)
    {
    	m_pImage = new SDL_Surface;
    	m_pImage = rhs.m_pImage;
    	m_pScreen = rhs.m_pScreen;
    	m_Rect = rhs.m_Rect;
    	m_FrameRect = rhs.m_FrameRect;
    	m_iFrameHeight = rhs.m_iFrameHeight;
    	m_iFrameWidth = rhs.m_iFrameWidth;
    	m_iNumFrames = rhs.m_iNumFrames;
    	m_iNumFramesX = rhs.m_iNumFramesX;
    }
    

    Rest der Klasse siehe oben.

    chrische



  • Nein der ist nicht gut

    CSprite::CSprite(const CSprite& rhs)
    {
    	m_pImage = new SDL_Surface;
    	m_pImage = rhs.m_pImage;
            .....
    }
    

    du erzeugst erst mal eine neue SDL_Surface und mit der nächsten Istruktion überschreibst du sie schon wieder --> Speicherleck
    Kurt



  • Hallo

    Dann kapiere ich einfach nicht, wie das gehen soll. Kann mir mal jemand einen Anstoss geben.

    chrische



  • Hallo

    Es weiß doch bestimmt einer von Euch, wie der korrekte Copyconstructor aussehen muss.

    chrische



  • Nö.



  • chrische5 schrieb:

    Es weiß doch bestimmt einer von Euch, wie der korrekte Copyconstructor aussehen muss.

    Kommt ganz drauf an was SDL_Surface ist
    Wahrscheinlich so wenn SDL_Surface einen Copyconstructor hat.

    CSprite::CSprite(const CSprite& rhs)
    {
        m_pImage = new SDL_Surface(*rhs.m_pImage);
            .....
    }
    

    das könnte eventuell auch funktionieren wenn z.B. SDL_Surface nur ein typedef für ein char array ist

    CSprite::CSprite(const CSprite& rhs)
    {
        m_pImage = new SDL_Surface;
        memcpy(m_pImage, rhs.m_pImage , sizeof(SDL_Surface));
            .....
    }
    

    Langer Rede kurzer Sinn: keiner kann dir sagen wie dein copyconstructor aussehen muss wenn du uns nicht sagst woraus genau dein CSprite besteht.
    Kurt



  • Hallo

    Erstmal dank für deine Antwort. Dieses Thema ist halt noch neu für mich. Den kompletten Code der Klasse steht doch schon im Forum nur ein paar Post weiter oben (früher). Brauchst du noch mehr Information?

    chrische



  • chrische5 schrieb:

    Erstmal dank für deine Antwort. Dieses Thema ist halt noch neu für mich. Den kompletten Code der Klasse steht doch schon im Forum nur ein paar Post weiter oben (früher). Brauchst du noch mehr Information?

    In deinem Fall geht's nicht um deinen Code. Es geht darum wie das ganze Framework funktioniert mit dem du da arbeitest. Wer das nicht kennt kann dir auch keine allgemeine Antwort geben wie man daraus eigene Klassen ableitet.
    Kurt



  • Hallo

    Danke für deine Hilfe. Ich werde jetzt mal versuchen deine Anregungen umzusetzten.

    chrische


Anmelden zum Antworten