C-分段故障(核心已转储)错误

sha*_*z17 -1 c segmentation-fault

为什么此代码显示分段错误(核心已转储)?

#include<stdio.h>

void swap(int*,int*);

int main(){
    int x=5,y=10;
    swap(&x,&y);
    printf("%d%d",x,y);
    return 1;
}

void swap(int *a,int *b){
    int *temp;
    *temp = *a;
    *a = *b;
    *b = *temp; 
}
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 5

int *temp;是问题。它并不指向您拥有的任何内存。取消引用的行为temp是不确定的。

int temp;改用(最好是int temp = *a;此后temp从不处于未初始化状态)temp而不是*temp在分配中使用。

(顺便说一句,0按惯例,返回值main表示成功。)