cast von void* zu struct* will nicht klappen
-
Ich möchte einer Funktion mit void-pointer ein struct übergeben. folgender struct:
struct EvalConfig
{
char* individual;
unsigned char numCycles;
};Dann wird in der Aufrufmethode ein struct erstellt (zur Sicherheit per print einmal ausgegeben, dass auch alles drin ist) und der Zeiger übergeben.
struct EvalConfig config;
config.individual = strdup(myString);
config.numCyle = cylces;myMethod(&config);
Die Zielmethode nimmt es so an:
void evaluateIndividual(void* args)
{
struct EvalConfig* config = (struct EvalConfig*)args;
char* expString = config->individual;
int num = config->numCycles;
}Die Variablen bei der Zielmethode haben dann aber nciht den korrekten Inhalt. numCyles ist auf 0,m der String zeigt auf Müll. Was mache ich falsch?
-
Bist du sicher, daß zwischen myMethod() und evaluateIndividual() nicht noch irgendwelche Zeiger-Arithmetik veranstaltet wird?
Ansonsten: Hat es einen Grund, daß du deine Daten über ein void* weiterreichst und nicht als EvalConfig*?
-
Deine Nachfrage hat mich den Fehler entdecken lassen: Ich starte einen Thread und übergebe eine lokale Variable ...
Danke!
-
Serethos schrieb:
Dann wird in der Aufrufmethode ein struct erstellt (zur Sicherheit per print einmal ausgegeben, dass auch alles drin ist) und der Zeiger übergeben.
...
Die Variablen bei der Zielmethode haben dann aber nciht den korrekten Inhalt. numCyles ist auf 0,m der String zeigt auf Müll. Was mache ich falsch?Wenn Du in der Aufrufmethode eine struct erstellst ist das eine lokale Variable, einen Zeiger darauf übergeben, kannste Dir sparen, weil bei Verlassen der Aufrufmethode die lokalen Variablen zerstört werden, es sei denn Du definierst Deine struct innerhalb der Aufrufmethode als static struct.
mfg