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指向了不能引用的内存,于是出现了段错误。
更详细的还是去看书吧。
------解决思路----------------------
这是野指针呢。给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;
}
在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;
}