为什么我用这个C代码会出现分段错误?

这段代码给了我一个分段错误:

char *s1 = "String 1", *s2 = "String 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; } 

但是,如果我将最后一个函数的主体更改为此代码,它不会产生任何问题:

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

我真的不明白为什么我的第一个代码出现了分段错误。 提前致谢。

您的tmp指针未初始化,您在下一行中取消引用它。 这是未定义的行为,其中包括段错误的可能性。