3

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

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;

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

4

1 回答 1

9

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

于 2013-04-05T22:41:10.910 回答