2012-11-29 116 views
0

我正在尝试创建一个冒泡功能,将数字排序并不断发生分段错误。任何建议?有关访问sasb冒泡排序号码

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,即使你做了,我不明白怎么会是相关的。无论如何,它们都会包含虚假值。