2016-06-14 52 views
0
void sort_int_tab(int *tab, unsigned int size); 

我想寫必須進行排序(就地)函數的「標籤」 int數組,完全包含「尺寸」 成員殺害,在上升訂單。保存。當我運行代碼時,我得到了SIGABOT,我該如何解決這個問題?排序int數組,得到了由SIGABOT在C

void sort_int_tab(int *tab, unsigned int size) 
{ 
    unsigned int i; 
    unsigned int j; 
    int    tmp; 

    i = 0; 
    j = 0; 
    while (i < size) 
    { 
     j = 0; 
     while (j < size) 
     { 
      if (tab[j] > tab[j + 1]) 
      { 
       tmp = tab[j]; 
       tab[j] = tab[j + 1]; 
       tab[j + 1] = tmp; 
      } 
      j++; 
     } 
     i++; 
    } 
} 
+2

'而(j <大小)''然後如果(製表[J]>標籤[J + 1])'。訪問'tab [j + 1]'超出了'j'的最後一個值。 – kaylum

+0

你跑了陣列的末尾。並使用'for'循環。 '爲(I = 0; I <大小;我++)'。 – user3386109

+0

,你只是增加'我',從來沒有做過任何事情?那該怎麼排序呢? – artm

回答

1

您通過訪問tab[j + 1]當你只是確信j < size訪問數組一個超出其長度。有可能是j == size,因此j出界。要解決這個問題,比較j + 1靠在限制:

while (j + 1 < size) ...