2015-04-19 48 views
1

這兩個數交換的代碼是分割故障(核心轉儲)在在C

#include <stdio.h> 
void swap(int *a,int *b) 
{ 
    int *tmp; 
    *tmp=*a; 
    *a=*b; 
    *b=*tmp; 
} 

void main() 
{ 
    int i,j; 
    printf("Enter any number\n"); 
    scanf("%d",&i); 
    printf("Enter another number\n"); 
    scanf("%d",&j); 
    printf("Numbers before swap\n"); 
    printf("value of i : %d\n",i); 
    printf("value of j : %d\n",j); 
    swap(&i,&j); 
    printf("Numbers after swap\n"); 
    printf("value of i : %d\n",i); 
    printf("value of j : %d\n",j); 
} 

上面一個是我的代碼,它工作正常,但是當控制檯輸出打印,它會給分割故障(核心轉儲) 這裏是O/p

 
abc:~/Desktop/C$ ./a.out 

Enter any number 

34 

Enter another number 

54 

Numbers before swap 

value of i : 34 

value of j : 54 

Numbers after swap 

value of i : 54 

value of j : 34 

Segmentation fault (core dumped) 
+0

我想這樣的INT主要(),並在年底返回0,但仍然面臨着同樣的問題 – dhimanta

+0

'tmp'不指向一個有效的內存位置。 –

+0

如果您向編譯器調用添加了合適的警告級別,您將很容易發現自己。習慣於這一點,生活將會更容易。 – mfro

回答

9

您正在使用tmp(您聲明爲指針)未初始化。

嘗試

int tmp; 
tmp=*a; 
*a=*b; 
*b=tmp; 
5

爲什麼是ü創建指針變量來存儲值

void swap(int *a,int *b) 
{ 
    int *tmp; 
    *tmp=*a; 
    *a=*b; 
    *b=*tmp; 
} 

而是使用一個簡單的變量是這樣的:

void swap(int *a,int *b) 
{ 
    int tmp; 
    tmp=*a; 
    *a=*b; 
    *b=tmp; 
} 

始終使用的主()返回類型爲INT並把返回0;最後

+0

謝謝解決這個問題 – dhimanta