我嘗試嘗試交換兩個變量中的值時出現分段錯誤。我代碼是:C中的分段錯誤嘗試使用指針交換兩個值
我收到以下錯誤:
Before 1,0
After 0,1
Segmentation fault (core dumped)
什麼看起來神祕對我來說,價值已成功交換後,正在產生的誤差。什麼是錯誤?我需要在任何地方指定指針嗎?
我嘗試嘗試交換兩個變量中的值時出現分段錯誤。我代碼是:C中的分段錯誤嘗試使用指針交換兩個值
我收到以下錯誤:
Before 1,0
After 0,1
Segmentation fault (core dumped)
什麼看起來神祕對我來說,價值已成功交換後,正在產生的誤差。什麼是錯誤?我需要在任何地方指定指針嗎?
你的指針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);
}
你swap
功能是錯誤的。它應該是
void swap(int *a,int *b){
int temp = *a;
*a= *b;
*b= temp;
}
使用此交換功能: -
void swap(int *a,int *b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}
這一行:INT *溫度;是一個指針,指向啦啦地。那麼代碼執行:* temp = * a;結果是某些價值已經在'某個'未知的地點加入了記憶。 (可能在你程序的地址範圍內,後來內存損壞導致seg錯誤,用3個xor語句執行交換更好,沒有臨時變量,只有3條指令,並且不會擔心內存損壞 – user3629249 2014-10-01 22:25:57