J'ai essayé de suivre les procédures de plusieurs réponses/tuturials et je reçois toujours la faute de segmentation en passant de multiples arguments à un thread? Qu'est-ce que je fais mal?Comment passer plusieurs arguments à filer dans c? [Segmentation fault]
struct:
struct client_struct {
int socketId;
char *message;
};
fonction processus:
// 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';
}
appelée main:
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);
}
Vous avez votre pointeur 'Client', mais vous ne semblent pas faire * * le point partout? Les variables locales non initialisées auront une valeur * indéterminée * (qui semblera presque aléatoire). Le fait de déréférencer une telle variable pointeur conduit à [* undefined behavior *] (https://en.wikipedia.org/wiki/Undefined_behavior) et est un moyen très courant d'obtenir des plantages. –
Vous avez probablement oublié d'initialiser 'client':' struct client_struct * client = malloc (sizeof * client); ' – usr
Puis, après ce qui précède, vous continuez à utiliser des pointeurs non initialisés, à quoi va pointer' client-> message'? Que pensez-vous qu'il se passe lorsque vous avez ce pointeur comme destination pour un appel 'strcpy'? –