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.