我試圖遵循幾個答案/ tuturials的程序,並且我仍然在將多個參數傳遞給線程時出現分段錯誤?我究竟做錯了什麼?如何將多個參數傳遞給c中的線程? [Segmentation fault]
結構:
struct client_struct {
int socketId;
char *message;
};
處理功能:
// Handle socket session
void *process(void *client)
{
client_struct *tmpClient = (client_struct*)client;
char sendline[BUFFSIZE], recvline[BUFFSIZE];
printf("can't reach this: %i\n", tmpClient->socketId);
strncpy(sendline, tmpClient->message, sizeof(sendline)-1);
sendline[sizeof(sendline)-1] = '\0';
}
從主叫:
int sendMessage(const char *message, int sock)
{
int result;
pthread_t process_thread;
struct client_struct * client;
client->socketId = sock;
strcpy(client->message, message);
printf("segmentation fault here: %s\n", client->message);
pthread_create(&process_thread, NULL, process, client);
pthread_detach(process_thread);
}
你有你的指針'client',但你似乎並沒有讓*點*地方?未初始化的局部變量將具有*不確定*值(這看起來幾乎是隨機的)。取消引用這樣的指針變量會導致[*未定義的行爲*](https://en.wikipedia.org/wiki/Undefined_behavior),並且是導致崩潰的一種常見方式。 –
你可能忘了初始化'client':'struct client_struct * client = malloc(sizeof * client);' – usr
然後在上面的那個之後,你繼續使用未初始化的指針,'client-> message'指向什麼?當你將該指針作爲「strcpy」調用的目的地時,你認爲會發生什麼? –