Zugriffsverletzung wahrscheinlich verursacht durch Zeiger



  • Hallo liebes C++ Forum,
    ich arbeite zur Zeit an einem kleinen Spiel bin jedoch noch recht neu in C++ und durchschaue Zeiger noch nicht zu 100%.

    Ich möchte einen MouseHandler erstellen und ihm einen Zeiger auf den SelectionHandler mitgeben, damit er auf dessen Funktionen zugreifen kann.
    Sobald das Programm aber auf m_pSelectionHandler versucht zuzugreifen gibt es eine Zugriffsverletzung.

    Game.h
    	SelectionHandler *pSelectionHandler;
    	MouseHandler *pMouseHandler;
    
    Game.cpp
    	//in einer initialisierungs funktion:
    	pSelectionHandler = new SelectionHandler();
    	pMouseHandler = new MouseHandler(pSelectionHandler);
    
    MouseHandler.h
    	MouseHandler(SelectionHandler *pSelectionHandler);
    	private:
    	SelectionHandler *m_pSelectionHandler;
    
    MouseHandler.cpp
    	MouseHandler::MouseHandler(SelectionHandler *pSelectionHandler)
    	{
    		m_pSelectionHandler = pSelectionHandler;
    	}
    
    	//später in einer Funktion MouseEvent:
    	if((GetEntityIdUnderMouse() != 0)  && (m_pSelectionHandler))			// erste Bedingung klappt, beim Zugreifen auf m_pSelectionHandler knallts
    	{
    		m_pSelectionHandler->SetSelected(GetEntityIdUnderMouse());
    	}
    

    Ich hoffe ihr könnt mir helfen, denn ich such nun seit geraumer Zeit den Fehler 😉

    Gruß
    Myosotis



  • Wo knallt es denn genau? Schon beim if oder beim Aufruf von SetSelected?

    Wenn beim if so ist wahrscheinlich der this-pointer fehlerhaft. Ansonsten ist es m_pSelectionHandler.

    Gründe dafür gibt es viele. Die können aus Deinem Minischnipsel nicht ermittelt werden. Schau mal, ob die Objekte vieleicht irgendwo gelöscht wurden.

    mfg Martin



  • Benutze lieber Smart Pointer statt roher Zeiger - falls du überhaupt Zeiger benötigst. Könntest du nicht den SelectionHandler in Game "normal" erstellen und Referenzen rumreichen?


Anmelden zum Antworten