2012-11-29 3 views
0

거품을 숫자로 정렬하고 계속 세분화 오류가 발생하는 함수를 만들려고합니다. 어떠한 제안? sa, sb에 액세스하는버블 정렬 번호

void bubblesort(struct Record *ptr, int records, int (*fcomp)(const void *, const void *)) 
{ 
    long c, d, i;  
    struct Record *sa, *sb, sc; 

    for (c = 0 ; c < (records - 1); c++) 
    { 
     for (d = 0 ; d < records - c - 1; d++) 
     { 
      for(i = 0; i < records - 1; i++) 
      { 
       if (fcomp(ptr+i, ptr+i+1) <= 0) 
       { 
        /* Swapping */ 

        sc = sa[d]; 
        sa[d] = sb[d+1]; 
        sb[d+1] = sc; 
       } 
      } 
     } 
    } 
} 
+1

"모든 제안"- bubblesort를 사용하지 마십시오. –

+0

디버거에서 실행해야합니다. 이렇게하면 더 많은 정보를 얻을 수 있습니다. –

+0

@MitchWheat : 거의 정렬 된 집합을 다룰 때, bubblesort는 대부분의 알고리즘을 능가합니다. – Fred

답변

2

정의되지 않은 행동.

sc = sa[d]; 
sa[d] = sb[d+1]; 
sb[d+1] = sc; 

은 모두 포인터가 매달려 있기 때문에 불법입니다.

struct Record *sa, *sb 

sasb에 대한 메모리를 할당하지 않고, 당신이 한 경우에도, 나는 그것이 관련이있을 것이라고 표시되지 않습니다. 어쨌든 그들은 가짜 값을 포함합니다.