Pourquoi ai-je une erreur de segmentation avec ce code C?

Ce code me donne une faute de segmentation:

char *s1 = "Ssortingng 1", *s2 = "Ssortingng 2"; void swap(char **, char **); int main(void) { swap(&s1, &s2); return 0; } void swap(char **p, char **q) { char **tmp; *tmp = *p; *p = *q; *q = *tmp; } 

Mais si je change le corps de la dernière fonction en ce code, cela ne pose aucun problème:

  char *tmp; tmp = *p; *p = *q; *q = tmp; 

Je ne comprends vraiment pas pourquoi je reçois une erreur de segmentation avec le premier code. Merci d’avance.

Votre pointeur tmp n’est pas initialisé et vous le déréférence dans la ligne suivante. C’est un comportement indéfini, qui inclut la possibilité d’une erreur de segmentation.