Wert in Pointer-Pointer speichern?



  • Hi,

    wie kann ich in einem **size die Größe von z.B. sizeof(unsigned char) speichern?

    unsigned char MyFunction(unsigned char **size)
    {
       unsigned char value = 0x12; 
       unsigned char rtnsize = sizeof(unsigned char); 
       *size = &rtnsize; 
    
       return(value);
    }
    

    Gruß
    Lars


  • Mod

    😕
    siezof(irgendwas) (bei (unsigned) char übrigens per Definition immer genau 1) ist vom Typ size_t (in der Regel ein unsigned int oder long unsigned int, muss aber nicht so sein). Ein unsigned char** ist ganz was anderes. Der Name eines Pointers, hier size, tut nichts zur Sache, der ist nur für den Programmierer zur Orientierung.
    Dein Codebeispiel macht auch nicht klar, was du überhaupt möchtest, das macht so keinen Sinn. Was soll value? Was soll die Zuweisung der Adresse einer lokalen Variablen an einen Pointer?
    Was möchtest du überhaupt genau erreichen? Erklär nicht das Wie, sondern das Was!

    (Theoretisch sollte sizeof(Datenpointer) == sizeof(size_t) sein, so dass man den Compiler mit einem reinterpret_cast zu seinem Glück zwingen kann, aber das ist bestimmt nicht das was du möchtest.)



  • so nicht.
    wenn du den size* auf value oder rtnsize zeigen lässt, zeigt size* nach dem ende der funktion ins nirvana, weil die beiden unsigned chars dann nicht mehr existieren. du musst entweder die lifetime von rtnsize oder value selbst kontrollieren (so dass sie auch nach ende der funktion erhalten bleiben) oder du übergibst die größe der funktion zurück.

    in dem fall ist das aber sinnlos, weil du value sowieso als kopie zurückgibst und

    sizeof(MyFunction(x)) == sizeof(unsigned char)
    

    .

    die lösung (in deinem fall): vergiss rtnsize und gibt value zurück.

    wahrscheinlich hast du aber ein etwas komplizierteres beispiel und es schon zusammengekürzt. nur, so macht es keinen sinn, weiter zu spekulieren, was du eigentlich tun willst.



  • Wieso, funktioniert doch wunderbar...

    #include <iostream>
    
    unsigned char MyFunction(unsigned char **size)
    {
       unsigned char value = 0x12;
       unsigned char rtnsize = sizeof(unsigned char);
       **size = rtnsize;
    
       return(value);
    }
    
    int main( )
    {
    	unsigned char the_real_foo = unsigned char();
    	unsigned char *foo( &the_real_foo );
    	unsigned char bar = MyFunction( &foo );
    
    	std::cout << "*foo = " << static_cast< unsigned >( *foo ) << "\n";
    	std::cout << " bar = " << static_cast< unsigned >(  bar ) << "\n" << std::endl;
    }
    

    😃



  • ich würde allerdings sagen, dass das semantisch nicht korrekt ist, weil das mit ** normalerweise nicht gemeint ist.


Anmelden zum Antworten