void Zeiger
-
Hallo,
ich habe so meine Probleme mit void Zeigern. Ich versuche der Funktion setData eine Struktur zu übergeben, die an anderer Stelle durch getData ausgelesen werden soll.Übergabe
MenuData men; men.MenuID = 10; ... setData( &men ); // Funktion erwartet void*
Ausgabe
MenuData men = *(MenuData*)getData();
Das funktioniert so nicht. ich erhalte falsche Werte. Ich tippe mal auf Adressen.
Wenn ich die Struktur mit new erstelle kann ich den Wert auslesen.
MenuData* men = new MenuData(); men->MenuID = 10; ... setData( men );
Allerdings habe ich ja kein delete und dadurch können Speicherprobleme entstehen...
Wie kann ich dem void*-Zeiger die Struktur ohne new übergeben, oder wie muss ich derefferenziern um meinen Wert zurück zu erhalten?
-
Du musst für MenuData Speicher via malloc anlegen, sonst ist der Speicher nach Verlassen der Funktion des ersten Code Blocks wieder weg.
-
Das Problem ist, dass der zweite Codeblock kein Zugriff auf "men" hat. Also geht dort "free" genausowenig wie ein delete nach new...
-
frager schrieb:
Ausgabe
MenuData men = *(MenuData*)getData();
geht denn wenigstens sowas bei dir?
MenuData *men; men = (MenuData*)getData(); printf ("%d\n", men->MenuID); // sollte die 10 anzeigen
-
Nein, leider nicht
-
frager schrieb:
Nein, leider nicht
dann wird's wohl das sein, was feigling schrieb. dein 'MenuData men' vor dem 'setData' ist 'n lokales objekt, das später nicht mehr gültig ist (du speicherst ja nur 'nen pointer). probier entweder eine globale oder 'static' variable oder mach 'setData/getData' so, dass die den kompletten inhalt speichern und zurück kopieren...