0

私は次の宿題の質問に取り組んでいます:

1次元配列を使用して、ユーザーが入力した10個の数値を格納するプログラムを作成します。数字を入力すると、10個の数字を昇順または降順で並べ替えて印刷するための2つのオプションを備えたメニューが表示されます。

私はいくつかの不可解な問題に直面しています。

私のコードは以下に掲載されています。配列の要素に対するユーザー入力を受け入れることができました。整数配列を並べ替えるためのコードをここで見つけました:http ://www.java-samples.com/showtutorial.php?tutorialid = 1577

このチュートリアルのコードは問題なく機能しますが、配列を自分で初期化するのではなく、ユーザーが指定した要素のコードを配列に追加するとすぐに、セグメンテーション違反が発生します。プログラムの実行時にコアダンプエラーが発生します。ソートプログラミングにヒットするまで機能し、その後クラッシュします。gccでのコンパイル時にエラーは発生しません。

#include<stdio.h>
#include<stdbool.h>

main()
{
    int temporaryStorage;
    int counter;
    int numArray[] = {0};
    int i = 0;
    bool sortExists = true;

    for (i = 0; i < 10; ++i)
    {
        fprintf(stdout, "Enter element[%d]->", i);
        fscanf(stdin, "%d", &numArray[i]);
    }

    printf("Array Before Sorting\n");
    for(counter = 0; counter < 10; ++counter){
        printf("%d ", numArray[counter]);
    }

    while (sortExists == true)
    {
        sortExists = false;
        for (counter = 0; counter < 9; ++counter)
        {
            if (numArray[counter] > numArray[counter + 1])
            {
                temporaryStorage = numArray[counter];
                numArray[counter] = numArray[counter + 1];
                numArray[counter + 1] = temporaryStorage;
                sortExists = true;
            }
        }
    }

    printf("\n\nArray After Sorting – Ascending Order\n");
    for(counter = 0; counter < 10; ++counter){
        printf("%d ", numArray[counter]);
    }
}
4

2 に答える 2

3
int numArray[] = {0};

配列はCで動的にサイズ変更されません。右側は基本的にint[1]あなたの配列の長さだけなので1(長さは右側から推定されます)。サイズを指定する必要があります。

int numArray[10] = {0};

(さらなるセグメンテーション違反のヒント:セグメンテーション違反は、ほとんどの場合、不十分な割り当て、範囲外のアクセス、またはダングリングポインターに関連しています)

于 2013-03-02T05:02:34.223 に答える
0

コードを修正し、正常に動作しています。

#include<stdio.h>
#include<stdbool.h>

int main()
 {
  int temporaryStorage;
  int counter;
  int numArray[10];
  int i = 0;
  bool sortExists = true;

for (i = 0; i < 10; ++i)
{
    fprintf(stdout, "Enter element[%d]->", i);
    fscanf(stdin, "%d", &numArray[i]);
}

printf("Array Before Sorting\n");
for(counter = 0; counter < 10; ++counter){
    printf("%d ", numArray[counter]);
}

while (sortExists == true)
{
    sortExists = false;
    for (counter = 0; counter < 9; ++counter)
    {
        if (numArray[counter] > numArray[counter + 1])
        {
            temporaryStorage = numArray[counter];
            numArray[counter] = numArray[counter + 1];
            numArray[counter + 1] = temporaryStorage;
            sortExists = true;
        }
    }
}

printf("\n\nArray After Sorting – Ascending Order\n");
for(counter = 0; counter < 10; ++counter){
    printf("%d ", numArray[counter]);
}
return 0;
}
于 2014-04-03T17:23:37.397 に答える