2012-12-15 58 views
2
#include<stdio.h> 
void selsort(int a[],int s) 
{ 
    int min,temp,i,j;  
    for(i = 0; i < s ; i++) 
    { 
     min = 0; 
     for(j = i+1 ; j < s; j++) 
     { 
      if(min > a[j]) 
      { 
       min = j; 
      } 
     } 
     temp = a[i]; 
     a[i] = a[min]; 
     a[min] = temp; 
     for (j=0;j<s;j++) 
     { 
      printf("%d",a[i]); 
     } 
     printf("\n"); 

    } 
} 
main() 
{ 
     int i,a[5]; 
     int size = 5; 
     printf("Enter elements of the array"); 
     for(i=0;i<size;i++) 
     { 
      scanf("%d",&a[i]); 
     } 
     selsort(a[5],size); 
} 

錯誤如下:C:分段故障(選擇排序)

selsort.c:35:2: warning: passing argument 1 of ‘selsort’ makes pointer from integer without a cast [enabled by default] 
selsort.c:2:1: note: expected ‘int *’ but argument is of type ‘int’ 

如何避免在將來出現此問題將是非常有幫助的任何提示

回答

3

你應該打電話您的功能是這樣的:

selsort(a, size); 

a[5]手段「中的索引5元素」(您的過去數組的末尾,用t他的方式:int a[5]中最大的法律元素是索引4)。

你也應該更換

min = 0; 

min = i; 

,並使用它像這樣:

if(a[min] > a[j]) ... 
+0

非常感謝,這真的很有用:) – user1905568

+0

@ user1905568歡迎您!如果您的問題解決了,您可能希望通過點擊複選標記來接受答案,以表明您不再尋找改進的答案,並在堆棧溢出時獲得全新的徽章。 – dasblinkenlight

0

在函數調用selsort(a[5], size);你只有經過第5 [不存在]成員。你想selsort(a, size);