Создание нить с этим:Сегментация Fault после pthread_create()
pthread_t thread;
pthread_create(&thread, NULL, (void*)&serve_connection, (void*)sockfd);
Функция Я зову определяется как:
void serve_connection (void* sockfd) {
ssize_t n, result;
char line[MAXLINE];
connection_t conn;
connection_init (&conn);
conn.sockfd = *((int*)sockfd);
while (! shutting_down) {
...
...
}}
Остальные функции в»... ", но это не имеет никакого значения, потому что я проследил вину сегм к
conn.sockfd = *((int*)sockfd);
Где conn.sockfd имеет типа„INT“.
Первоначально serve_connection был:
void serve_connection (int sockfd){
...
conn.sockfd = sockfd;
...
}
Но я зову его из потока, так что должно быть изменено. Я должен также отметить, что sockfd передается pthread_create, это int со значением.
Я также получаю эти предупреждения о компиляции:
warning: ISO C forbids conversion of function pointer to object pointer type
warning: cast to pointer from integer of different size
warning: ISO C forbids passing argument 3 of âpthread_createâ between function pointer and âvoid *â
note: expected âvoid * (*)(void *)â but argument is of type âvoid *â
Все они относятся к линии, где я называю pthread_create. Я игнорировал предупреждения до сих пор, потому что программа работает до указанной выше строки, поэтому я предполагаю, что функция вызывается правильно. Я просто не могу понять, что вызывает ошибку сегментации, поскольку я все еще новичок в работе с pthreads (я предполагаю, что я звоню или объявляю что-то неправильно, но смотреть на библиотеки на самом деле не помогло).