2016-08-04 70 views
-3

Ich habe meine Frage bearbeitet. Es scheint, dass Threads anders als erwartet funktionieren (Windows vs. Linux). Dies ist das komplette Arbeitsbeispiel:Wie teile ich Speicher aus dem Hauptprogramm mit einem Thread in Linux

#include <pthread.h> 
#include <stdio.h> 
#include <string.h> 

void *testing(void *mptr) 
{ 
char *mystr; 
mystr=(char *)mptr; 
printf(mystr); 
printf("finished running thread\n"); 
return NULL; 
} 

int main() 
{ 
pthread_t mythread; 
char *str1; 

str1=malloc(50); 
strcpy(str1,"Hello World\n"); 
printf(str1); 
printf("About to start\n"); 

//pthread_create(&mythread, NULL, testing, str1); 

printf("finished creating thread\n"); 
printf(str1); 
free(str1); 
return 0; 
} 

Above Programm erzeugt:

Hello world 
About to start 
finished creating thread 
Hello World 

Bitte beachten Sie, dass ich nicht einen Thread in es erschaffe - die spezifische Zeile kommentiert werden. Wie auch immer, wenn ich die „pthread_create ..“ nicht kommentieren Sie -Linie der Ausgang sporadisch, manchmal Müll hat:

Hello world 
About to start 
finished creating thread 
Hello World 
&%¤&finished creating thread 

Manchmal ist die verstümmelte Teil in Ordnung ist, manchmal zeigen sie als „o Welt“ usw. .

Von was ich gegoogelt habe ist, dass Stapel nicht auf die gleiche Weise wie Windows geteilt wird.

Wie kann ich auf Speicher zugreifen, die ich später im Hauptprogramm im Hauptprogramm malloc? Fehle ich etwas?

+2

Können Sie uns zeigen, wo und wie Sie 'somelinkedlist' definieren? – rjp

+1

Abstimmung zum Schließen. [Siehe: So erstellen Sie ein minimales, vollständiges und überprüfbares Beispiel.] (Https://stackoverflow.com/help/mcve). – DevNull

+0

Ich stimme DevNull zu, der Code, den Sie angezeigt haben, ist nicht der Code, der das Problem hat. – user3386109

Antwort

0

Vielleicht sollten Sie warten, bis der Thread fertig ist, bevor Sie die Zeichenfolge freigeben?

pthread_join ist dein Freund hier.

0

Ich habe mein Problem herausgefunden. Es war wahrscheinlich, dass Erinnerungen durcheinandergeworfen wurden. Aber diejenigen, die meine erste Frage gelesen hatten, mochten mich nicht, keine volle Quelle bekannt zu geben, und ich bekam -3 downvotes.

Ich habe dann die meine ursprüngliche Frage bearbeitet, um eine vollständige Testquelle zur Verfügung zu stellen.

Leider haben diejenigen, die mich zuerst abgelehnt haben, nicht zurück überprüft, ob ich meine Frage behoben habe.

Jetzt haben mich die Downvotes daran gehindert, neue Fragen zu Stackoverflow einzugeben. Ich habe jetzt insgesamt -6 Downvotes von zwei "schlechten" Fragen. Also bitte: diejenigen, die downvoted: bitte heben Sie die downvotes.