linux c编程调用函数时出现segmentation fault

来源:互联网  时间:2016/7/12 19:15:43

关于网友提出的“ linux c编程调用函数时出现segmentation fault”问题疑问,本网通过在网上对“ linux c编程调用函数时出现segmentation fault”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: linux c编程调用函数时出现segmentation fault
描述:

linuxc语言指针

在linux下写c语言程序时调用的函数有指针时经常出现segmentation fault, 所以我写了一个简单的程序来测试,但是还是出现这个错误,时我的程序有问题呢还是什么原因?
  1 #include 
  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 } 
解决方案1:

【结论】程序问题:使用了随机指针。
【原因】Line 6: 指针a(指针b)是随机的,就是说指向的内存是不可控的。Line8 与Line10都可能Core掉。
【对策】Line 6 修改一下:int *a = malloc(sizeof(int)), *b = malloc(sizeof(int)); 然后return前free(a);free(b);

解决方案2:

#include 
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;
}  

解决方案3:

int *a, *b; 

这是野指针呢。给a和b指针动态申请一下内存空间试试。 解决方案4:

这个错误的意思你该明白:段错误,一般都是非法引用指针导致的。
scanf( "%d%d", a, b );     输入数据存入a和b。但是你a和b都没有空间,也就是a和b指向了不能引用的内存,于是出现了段错误。
更详细的还是去看书吧。

上一篇小问题,新手求教
下一篇敢不敢来个知道的,来了敢不敢顺带做个好事告诉我下答案。
明星图片
相关文章
《 linux c编程调用函数时出现segmentation fault》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)