-2
リストの要素を昇順(挿入の並べ替え)でソートするアルゴリズムを記述しようとしています。次の変数(と配列)をすべてintとして定義して、main関数を開始します。Cの挿入ソートのセグメンテーションフォルト
void sort(int a, int b , int list[], int i)
{
for(i=1; i<(b); i++)
{
while(list[i-1]>list[i])
{
a = list[i-1];
list[i-1]=list[i];
list[i]=a;
i--;
}
}
}
リスト内の要素の数であり、主に0に初期化されるB: ここソート機能です。
私は、正の整数の表を使ってソートを使用するとき、それは望ましい方法でソートします。しかし、値の一部が負の場合、プログラムはセグメント化エラーを生成します。
誰かがエラーを理解するのに役立つでしょうか?ありがとうございました!最初のループでは
セグメンテーションフォールトは、あなたが属していないメモリにアクセスしていることをほぼ確実に意味します。あなたの内側のループを調べてください。 0より小さいか、要素の数よりも少ないインデックスを使って 'list'にアクセスする方法はありますか? –
ループのインクリメントとして 'i'を使うforループの中で、' i'の値を自分自身で変更するのは悪い考えです。 whileループの中で初めて減分すると0になり、 'list [-1]'にアクセスしようとしています。 – bruceg
@bruceg Debatable(文字をスキップするためにパーサを書くときにはたくさんありますが)このケースは確かです。 – YoYoYonnY