2014-09-30 31 views
3

我嘗試嘗試交換兩個變量中的值時出現分段錯誤。我代碼是:C中的分段錯誤嘗試使用指針交換兩個值

我收到以下錯誤

Before 1,0 
After 0,1 
Segmentation fault (core dumped) 

什麼看起來神祕對我來說,價值已成功交換後,正在產生的誤差。什麼是錯誤?我需要在任何地方指定指針嗎?

+1

這一行:INT *溫度;是一個指針,指向啦啦地。那麼代碼執行:* temp = * a;結果是某些價值已經在'某個'未知的地點加入了記憶。 (可能在你程序的地址範圍內,後來內存損壞導致seg錯誤,用3個xor語句執行交換更好,沒有臨時變量,只有3條指令,並且不會擔心內存損壞 – user3629249 2014-10-01 22:25:57

回答

11

你的指針int *temp;點沒有。

因此,當您的程序確實*temp=*a;時,它會將a的值放入隨機存儲器塊中。

試試這個修復:

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

更新

其他問題:

假設我想使用溫度爲指針變量,而不是作爲一個普通 變量,有什麼辦法讓我的程序執行或我需要 離開我的固執?

答:你可以試試這個:

void swap(int *a,int *b){ 
    int *temp; 
    temp = malloc(sizeof(int)); 
    if (temp == NULL) 
     return; 
    *temp=*a; 
    *a=*b; 
    *b=*temp; 
    free(temp); 
} 
+0

假設我想使用'temp'作爲指針變量而不是常規變量,有什麼辦法讓我的程序執行或者我需要離開我的固執嗎? – Gaurav 2014-09-30 05:26:19

+0

@Gaurav但是你爲什麼要這麼做? – Will 2014-09-30 05:30:36

+0

@llya在使用free(temp )使用temp = NULL,以便它指向沒有... – Ajay 2014-09-30 05:32:49

3

swap功能是錯誤的。它應該是

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

使用此交換功能: -

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