Ich versuche, einen neuen Thread zu erstellen, der eine Funktion namens csvSearch ausführt. Die Funktion benötigt 3 Informationen, also setze ich diese in eine Struktur.Struct verliert die Spur der Variablen, wenn pthread_create verwendet wird
csvSearch nimmt (void *)
als Argument, und wenn diese Zeiger zurück auf einen Zeiger auf die Struktur Gießen, irgendwie verliere ich die gespeicherten Daten in outpath
und column
, zwei der Felder des struct.
Dies ist die Struktur Definition lautet:
typedef struct {
char path[256];
char outpath[256];
char column[32];
} Data;
Wenn Sie den Faden zu schaffen I
Data *data = malloc(sizeof(Data *));
strcpy(data->path, path);
strcpy(data->outpath, outpath);
strcpy(data->column, column);
pthread_create(&threads[threadCount], NULL, csvSearch, data);
Dies ist eine Zusammenfassung von csvSearch den folgenden Code verwendet, die Funktion Ich versuche
zu nennenvoid *csvSearch(void * data){
Data * input = (Data *) data;
char * path = input->path;
char * outpath = input->outpath;
char * column = input->column;
//path is the correct string, but outpath and column are both empty strings
}
Ich habe Gdb verwendet, um dies ausgiebig zu testen, und konnte das Problem nicht finden. Ich weiß, dass bis pthread_create
Daten die richtigen Informationen enthalten, und dass ich die gleiche Speicheradresse und -größe bekomme, wenn es in eine Data *
umgewandelt wird, aber input->outpath
und input->column
sind beide mit Nullzeichen gefüllt.
Ist etwas in meiner Syntax falsch? Oder können Sie auf diese Weise keine Informationen an eine Funktion in einem neuen Thread weitergeben?
Große Präsentation der Frage. – lockcmpxchg8b