プログラムが実行されないのですが・・・。

[戻る]
キャンピー 2001/11/05(月) 12:06:45
このプログラムで、コンパイルしてもエラーが出ないのですが、
実行すると、バグがおきてしまいます。
理由が、はじめたばかりの初心者なものでわかりません。
おしえてください。
(ちなみに、このプログラムは、数値を入力して小さい順に
並び替えるものです)

#include<stdio.h>

void main()
{
    int i;
    int data[256];
    while(scanf("%d",&data[i++])!=EOF);
    void SelSort(int,int),Swap(int *,int *);
    printf("%d,data[i++]");
}
        void SelSort(int data[], int n)
        {
            int i,j,Midx;
            void Swap(int *,int *);
            for (i=0;i<n-1;i++)
     {
         Midx=i;
         for (j=i+1;j<n;j++)
         {
             if(data[Midx]<data[j])
             {
                 Midx=j;
             }
         }
         if(Midx!=i)
             Swap(&data[Midx],&data[i]);
     }
 }
 void Swap(int *x,int *y)
 {
     int temp;

     temp = *x;
     *x = *y;
     *y = temp;
 }

ハッハー 2001/11/05(月) 12:44:40
???
入力して表示して終わりですか?
sortやらswapやらは定義されているだけで呼び出さないんですか?
どうなんですか?

キャンピー 2001/11/05(月) 13:04:32
数値を入力すると、止まってしまい、表示もされずにエラーがでて、
プログラムの内容を呼び出すまでいたっていないと思うのですが・・・。
<ハッハーさん>どこか、間違っているところがあったらおしえてください。

YuO [E-Mail] 2001/11/05(月) 14:07:16
エラーの内容は?

おそらくAccess Violationでしょう。iの値が初期化されていません。
#他にもおかしいところはありますけどね。

ステップ実行したり,ウォッチを使ったりして何が原因かを探し出す訓練をしておいた方が良いですよ。

キャンピー 2001/11/05(月) 14:44:23
エラーは、{(クラス名)原因で(クラス名).EXEにエラーが発生しました。
                       (クラス名)は終了します。}
となって、作動しないのです。
他に、おかしいところってなんですか?よければ具体的に教えてください。

YuO [E-Mail] 2001/11/05(月) 16:29:24
> while(scanf("%d",&data[i++])!=EOF);
とりあえず,ここでi < 0とかi >= 256の時,確保したメモリ外へのアクセスを行ってしまいます。
その為の処理を入れる必要があります。同じように,
> printf("%d,data[i++]");
も大問題ですし(%dに対応するデータが渡されていない),
ハッハーさんが書かれているように,ソートされません。
> void SelSort(int,int),Swap(int *,int *);
これはプロトタイプ宣言であることはわかっていますよね。
#SelSortの引数間違っているし……。

たけみ 2001/11/05(月) 22:49:23
まず初歩から説明したちゃんとした本を一冊購入してください。
「変数が箱だとっ!何言ってやがる」と突っ込みたくなるような、且つサンプルソースが多い本がいいです。
失礼ですが、このレベルなら\1200〜\2000クラスの書籍一冊ですべて解決できます。
そしてC/C++では無く、C言語という本を買ってください。はじめからC++が混ざると混乱します。
いい本を探す方法?スバリ立ち読みです:笑。
解らない所があったら「開いてみようかな」と思える本がベストです。
おカタイ文章の本が必ずしも良い教材とは限りません。
また、関数集とかTips集とかがハンドブックサイズでありますが、最初のうちはお勧めしません。
関数の規則と使い方が判ってきたら購入してもいいかなぁ〜って感じですね。要らないですけど。

たけみ 2001/11/05(月) 22:54:15
なんか補足が多いなぁ -> 私

なんでも質問はOKです。初歩的だから答えるのが面倒くさいとか言うのではなくて、
初歩だからこそちゃんとした本を読んだほうがいいと思います。

P.S.〜
できればソースにコメント書いてね♪

ハッハー 2001/11/07(水) 19:46:47
とりあえず、変数iに初期値を入れとこう。
そしたら、できると思うよ。
入力が256超えたらバグるけど、そんなもんサポートせんでもいいと思う。
そんなに入力する人が悪いんやから(実際、256も入力するの大変やで)
気にする必要あらへん!
安全性も考慮したのであれば考えんこともないけど…。

古いスレッドには追加発言できません。