1

数値をバブルソートし、セグメンテーション違反が発生し続ける関数を作成しようとしています。なにか提案を?

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;
                }
            }
        }
    }
}
4

1 に答える 1

2

saへのアクセス時の未定義の動作sb

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

ぶら下がっているポインターであるため、すべて違法です。

struct Record *sa, *sb

saandにメモリを割り当てませんsb。たとえ割り当てたとしても、それがどのように関連するかわかりません。いずれにせよ、それらには偽の値が含まれます。

于 2012-11-29T02:23:39.570 に答える