Ich schreibe einen Server, der einen Thread für jede ankommende Anfrage startet. Ich möchte die Anfragen und einige andere Dinge an den Thread übergeben. Dazu verwende ich eine Struktur, die zugeordnet ist und einen Zeiger enthält, der auf eine zugewiesene Zeichenfolge zeigt. Ich tue dies, um die Struktur für den Thread lebendig zu halten, selbst wenn der Haupt-Thread in seine nächste Schleife eintritt. Wenn ich den Zeiger auf diese Struktur zu meinem Thread übergeben, "verlor" der Zeiger in der Struktur, die auf die Zeichenfolge zeigen sollte, seine Informationen. Nun, ich bekomme eine EXC_BAD_ACCESS und ich habe keine Ahnung warum.Zeiger verloren, wenn zugewiesene Struktur mit Zeiger auf zugewiesene Zeichenfolge als Argument für Pthread übergeben wird
Jede Hilfe ist willkommen :-)
typedef struct _thdata
{
int socket;
int thread_no;
char *parameter;
}thdata;
void *thread_function(thdata *data)
{
printf("Thread %i: got:%s\n",
data->thread_no, data->parameter);<-EXC_BAD_ACCESS
...
free data->parameter;
free data;
pthread_exit((void *)0);
}
int main(...)
{ ...
while(1){
...
thdata *data;
data = (thdata*)malloc(sizeof(data));
data->socket=connSocket;
data->thread_no=i;
data->parameter=(char*)malloc(strlen(param)+1);
strcpy(data->parameter, param);
...
pthread_create(&p_thread, NULL, (void *(*)(void *))thread_function,
(void*) &data);
...
}
}
Ahhh ja ofcause, vielen Dank Ich habe zu oft durchgesehen, also habe ich es nicht mehr gesehen! – Schaltfehler
Ich war so darauf konzentriert, meinen Code zu ändern, um auch strcpy zu machen. Ich habe nie bemerkt, dass mein Problem genau das gleiche war wie deines, pass auf das falsche Argument. + 1 – RyanfaeScotland