2016-06-14 17 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) ...