2017-11-29 2 views
1

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 nennen
void *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?

+0

Große Präsentation der Frage. – lockcmpxchg8b

Antwort

3
Data *data = malloc(sizeof(Data *)); 

für eine Data* Zuweisen von Speicher und nicht Data .Sie müssen

Data *data = malloc(sizeof(Data)); 
+1

Oder noch besser, verwenden Sie 'sizeof * data'. –

Verwandte Themen