Exceptions und Zeiger dereferenzieren



  • Hallo.

    Lässt sich denn keine SEH-Exception zu einer C++-Exceptionkonvertieren wenn das dereferenzieren eines Zeigers fehlschlägt?
    Das soetwas klappt, weiß ich. Aber nicht wie.
    Da ich denke es könnte compilerspezifisch sein, ich nutze VC++ 2008 Express.

    Hier mein Ansatz, wirft nichts und crashed fröhlich wenn ein Zeiger 0 ist:

    float x;
    	float y;
    	float z;
    
    	try
    	{
    		DWORD gameBase	= *reinterpret_cast<DWORD*>(ROM_GAMEBASE);
    		DWORD player	= *reinterpret_cast<DWORD*>(gameBase + PLAYERPOINTER);
    
    		x			= *reinterpret_cast<float*>(player + OBJECT_XPOS);
    		y			= *reinterpret_cast<float*>(player + OBJECT_YPOS);
    		z			= *reinterpret_cast<float*>(player + OBJECT_ZPOS);
    	}
    	catch(...)
    	{
    		wxMessageBox(L"Couldn't set waypoint. Try again", L"Navigator Error", wxOK | wxICON_ERROR, this);
    		return;
    	}
    

    Würde mich über Hilfe freuen, danke. 🙂
    Grüße,
    Flo

    Edit: Argh, hätte wohl eher ins Win Forum gehört. Bin schwer müde 😉



  • s. http://stackoverflow.com/questions/315948/c-catching-all-exceptions

    For catch(...) to work on all exceptions make sure that in the C++ settings, "Enable C++ Exceptions" is set to "Yes With SEH Exceptions"



  • Wieso machst du nicht was Standardkonformes?

    template <typename Dest, typename Source>
    Dest& cast_and_dereference(Source* src)
    {
        if (src == NULL)
            throw std::runtime_error("null pointer dereferenced");
    
        return *reinterpret_cast<Dest*>(src);
    }
    
    DWORD player = cast_and_dereference<DWORD>(gameBase + PLAYERPOINTER);
    


  • Icematix schrieb:

    Hallo.

    Lässt sich denn keine SEH-Exception zu einer C++-Exceptionkonvertieren wenn das dereferenzieren eines Zeigers fehlschlägt?
    Das soetwas klappt, weiß ich. Aber nicht wie.

    Kann nie zuverlässig funktionieren. Warum wurde schon oft erklärt.


Anmelden zum Antworten