整数配列を取り、数値順にソートする基本的なソートプログラムを作ろうとしています。 k + 1が配列のサイズよりも大きくなると、ランタイムエラーが発生します。私はif文の最後に|| (a[k + 1] != NULL)
、さらに(a[k + 1] == \0)
を投げてみましたが、それらはコンパイルされません。任意のヒント?配列を超えたアルゴリズムチェックによるCのランタイムエラー
k < j - sizeof(a[i]) - 1
時期:
int main(void)
{
int a[5];
printf("\nWill sort your numbers from lowest to highest!\n");
for (int i = 0; i < 5; i++)
{
printf("Element %i = ", i + 1);
scanf("%d", &a[i]);
}
int swap;
int i = 0;
for (int j = 0; j < sizeof(a[i]); j++)
{
for (int k = 0; k < j - sizeof(a[i]) - 1; k++)
{
if (a[k] > a[k + 1])
{
swap = a[k];
a[k] = a[k + 1];
a[k + 1] = swap;
}
}
}
for (int c = 0; c < 5; c++)
printf("%d\n", a[c]);
return 0;
}
'int j = 0; j
'NULL'はヌル*ポインタ*です。"変数(または配列要素)に値がありません "という意味ではありません。 *すべての*配列要素と変数は、初期化されていないかどうかが不確定であっても、値を持ちます。 –
また、あなたの問題にもっと直接関係する 'sizeof(A [i])'は、 'sizeof(int)'に等しい*要素* 'A [i]'のサイズを与えます。通常は「4」に等しい。また、 'sizeof'演算子はバイト*でサイズ*を与えます。したがって、あなたの配列' A 'は 'sizeof(A)'を実行すると20を与えます( 'int'が4バイトの場合)。 'sizeof A/sizeof A [0]'を実行して、配列 'A'の要素数を取得してみてください。 –