void* int-Wert zuweisen



  • Hallo,
    ich möchte einem void Pointer, der sich innerhalb einer Listenstruktur befindet, einen integer wert zu weisen.

    typedef struct list *plist;
    struct list {
    	void *element;
    	unsigned int contentsTyp;
    	plist next;
    };
    /*elem ist auch ein void Pointer, dem ein integer Wert übergeben wurde*/
    tmp->element=malloc(sizeof(int));
    tmp->element=(int *)elem;
    /*hier wird element die adresse von elem zugewiesen und nicht der Wert
    *((int  *)elem) ist aber nicht zuweisbar*/
    

    mfg
    michael



  • Problem gelöst!
    habe wohl etwas voreilig gepostet.



  • michael83 schrieb:

    Hallo,
    ich möchte einem void Pointer, der sich innerhalb einer Listenstruktur befindet, einen integer wert zu weisen.

    Das ist, so formuliert, keine gute Idee.

    Du vermischst 2 verschiedene Sachen. Zum einen willst du, dass der void* nachher auf einen bestimmten int zeigt. Zum anderen aber versuchst du dem void* einen int zuzuweisen. Das sind (falls es nicht klar war) 2 verschiedene Sachen.

    Um den void* auf einen dynamisch allozierten int zeigen zu lassen, musst du nur wenig ändern:

    tmp->element=malloc(sizeof(int));
    *(int*)tmp->element = *(int *)elem;
    

    Die void-Zeiger werden erstmal in int-Zeiger umgewandelt. Dann wird dem Inhalt des einen der Inhalt des anderen zugewiesen.

    Nur um das, was du im Topic sagst, nochmal zu illustrieren:

    tmp->element = (void*)(*(int*)elem);
    

    Das geht, wird sogar manchmal gemacht (eigentlich eher andersrum, dh Pointer werden in ints gespeichert), ist aber wahnsinnig unsicher, fehlerträchtig, unportabel und löst Hautirritationen aus. Nicht machen.



  • @Bashar Dieser Thread ist eine folge des threads http://www.c-plusplus.net/forum/viewtopic.php?p=359918 Hast du eine Idee wie man sein Problem besser lösen kann.


Anmelden zum Antworten