segfault problem
-
Hi!
Ich hab hier ein Problem mit einem segfault:
/** global handle request thread function */ void* handleRequest(void*); int Server::startServer() { /* call sock(), bind() and listen() */ // ... // ... pthread_t reqThread; while(true){ int *dataSock = new int; if((*dataSock = accept(sock, 0, 0)) < 0){ delete dataSock; cerr << "server: accept() failed! " << errno << endl; return 5; } pthread_create(&reqThread, 0, handleRequest, (void*)dataSock); //FIXME: Genau HIER mit diesem Funktionsaufruf segfaulted er. //FIXME: oops, infinite loop. :o } return 0; } void* handleRequest(void *s) { // Das hier wird nicht mehr aufgerufen, da die Applikation vorher per segfault abschmiert. int sock = *((int*)s); delete (int*)s; //TODO: Handle Request close(sock); return 0; }
Wieso bekomme ich hier einen segfault?
Ich blick da nicht ganz durch.danke für eure Hilfe!
MFG fsd.
-
sowas blödes.
Hab vergessen gegen lpthread zu linken.
*schäm*
Hat sich also erledigt.
MFG fsd.
-
dataSock scheint immer gleich gross zu sein...
wesshalb also dynamisch erstellen ?
-
weil ich es dem Thread als argument übergebe und dann von da lösche.
Wenn es dynamisch erstellt wird, gehe ich also sicher, dass das Objekt immer noch den gleichen Wert hat, wenn es im Thread gebraucht wird. Ansonsten könnte es sein, das in der Zwischenzeit ein neuer socket geöffnet würde und das Objekt überschreiben würde.
oder sehe ich das falsch.MFG fsd.