Probleme beim Speicherzuweisung.



  • Hi,

    ich versuche ein DX-Like bei den Interfaces hin zu bekommen, da gibt es ja zum verändern einer Surface oder Textur die Lock und Unlock funktion.

    Die wird ca. so benutzt:

    int*buffer = NULL;
    
    m_BackBuffer.Lock (NULL, &buffer, NULL, ...);
    
    for (int i=0; i<20; ++i)
    buffer[i] = 30;
    
    m_BackBuffer.Unlock ();
    

    soweit so gut.

    Jetzt habe ich versucht das fast genau so umzusetzen, also & bei Lock angeben zum Buffer, welcher ein Pointer ist und bei der schleife so zuzuweisen auf das "innere Array" des Interfaces.

    Nur mein Programm schmiert ab 😞

    #include <iostream>
    
    class CTest
    {
    public:
    	CTest () 
    	{
    		x		= new int[2]; 
    		x[0]	= 1; 
    		x[1]	= 2; 
    		locked	= false;
    	}
    
    	~CTest(void) 
    	{
    		delete [] x; 
    	}
    
    	void blit () 
    	{
    		if (locked)
    			std::cout << "Error, locked." << std::endl;
    		else
    			std::cout << x[0] << " " << x[1] << std::endl; 
    	}
    
    	void lock (int **xxx) { x = *xxx; locked = true;}
    	void unlock () { locked = false; }
    
    private:
    	int *x;
    	bool locked;
    };
    
    int main (void)
    {
    
    	CTest test;
    	test.blit ();
    
    	int *y = NULL;
    	test.lock (&y);
    
    	y[0] = 30;		// Hier bei der Zuweisung schmiert er ab...
    	y[1] = 30;
    
    	test.unlock ();
    
    	test.blit();
    
    	int x;
    	std::cin >> x;
    
    	return 0;
    }
    

    Weis jemand, wie ich diesen Fehler beheben kann aber das Styling so lassen kann? denn ich möchte meine API möglichst DX getreu aufbauen, da es enorm wichtig ist für mein momentanes Referat.

    Danke für euere Bemühungen. 🙄



  • void lock (int **xxx) { x = *xxx; locked = true;}
    in der zuweisung liegt der fehler.
    *xxx=x müsste die lösung bringen...



  • man bin ich ein hirsch 😃 danke *vor den kopf hau*


Anmelden zum Antworten