linux c编程调用函数时出现segmentation fault,该如何解决

linux c编程调用函数时出现segmentation fault
在linux下写c语言程序时调用的函数有指针时经常出现segmentation fault, 所以我写了一个简单的程序来测试,但是还是出现这个错误,时我的程序有问题呢还是什么原因?

  1 #include <stdio.h>
  2 
  3 void swap( int *x, int *y );
  4 int main( void )
  5 {
  6     int *a, *b; 
  7     printf( "please enter the value of a and b:\n" );
  8     scanf( "%d%d", a, b );     
  9     printf("exchange a and b:\n" );
 10     swap( a, b );
 11     printf( ":%d\t%d\n", *a, *b );
 12     return 0;
 13 }
 14 
 15 void swap( int *x, int *y )
 16 {
 17     int temp; 
 18 
 19     temp = *x;
 20     *x = *y;
 21     *y = temp;
 22 } 
------解决思路----------------------
这个错误的意思你该明白:段错误,一般都是非法引用指针导致的。
scanf( "%d%d", a, b );     输入数据存入a和b。但是你a和b都没有空间,也就是a和b指向了不能引用的内存,于是出现了段错误。
更详细的还是去看书吧。
------解决思路----------------------
int *a, *b; 

这是野指针呢。给a和b指针动态申请一下内存空间试试。
------解决思路----------------------
【结论】程序问题:使用了随机指针。
【原因】Line 6: 指针a(指针b)是随机的,就是说指向的内存是不可控的。Line8 与Line10都可能Core掉。
【对策】Line 6 修改一下:int *a = malloc(sizeof(int)), *b = malloc(sizeof(int)); 然后return前free(a);free(b);
------解决思路----------------------
#include <stdio.h>

void swap( int *x, int *y );
int main( void )
{
    int a, b
    printf( "please enter the value of a and b:\n" );
    scanf( "%d%d", &a, &b );     
    printf("exchange a and b:\n" );
    swap( &a, &b );
    printf( ":%d\t%d\n", a, b );
    return 0;
}

void swap( int *x, int *y )
{
    int temp; 

    temp = *x;
    *x = *y;
    *y = temp;
}