2016-11-12 19 views
0

C言語の初心者で、配列を初期化する関数で問題が発生しています。コードにコンパイルされます。Windows 10固有のコード上のブロック16.01私は問題を抱えているのである:私は私がクラッシュする前に取得していますし、私はそれが作るどのくらい見にprint文を設定したプロセスはステータス-1073741819の中間ループで終了しましたか?

void initAuction(float auction[2][MAXAUCTIONITEMS]) { 
    int i; 

    for (i = 0; i < MAXAUCTIONITEMS; i++) { 
     auction[1][i] = -1; 
     printf("\n%f\t%d\n", auction[1][i], i); 
    }; 
    for (i = 0; i < MAXAUCTIONITEMS; i++) { 
     auction[2][i] = 0; 
     printf("\n\n%f\t%d", auction[2][i], i); 
    } 
    printf("\n%f\n", auction[2][70]); 
    return; 
} 

2番目のforループですが、i = 140でクラッシュします。定数(1000に等しい)を変更すると、クラッシュせずに最高に設定することができます。私は< 84で十分です。最初の行が問題を初期化しても行2がi = 140付近でクラッシュするように選択すると、終了ステータス-1073741819がループの途中で発生します。

私はgoogleとここで検索しようとしましたが、復帰文を必要としないソリューションや、存在しないものにアクセスしようとしているソリューションを見てから、終了コードが非常に特殊なコードではないようです。本当に失われた。

+0

'float auction [2] [MAXAUCTIONITEMS]':あなたの最初のディメンションのサイズは2ですが、オークションにはオークション[2] [i] 'があります。 Cは0ベースであることを覚えておいてください。 – Evert

+0

一般的に、エラーを示すプログラム全体を提出する必要があります。エラーを表示するために最小限の作業を行う 'main'を含めてください。 – Hurkyl

+1

デバッガを使用してこれらの問題を解決します。 – Evert

答えて

1

auctionの最初の次元は2あり、この指標のための唯一の有効な値は01です。あなたがこの方法を修正して、コードを簡素化することができ

:二次元がauctionのタイプの一部ではないことを

void initAuction(float auction[2][]) { 
    for (int i = 0; i < MAXAUCTIONITEMS; i++) { 
     auction[0][i] = -1; 
     auction[1][i] = 0; 
    } 
} 

注意を、それがコンパイラによって無視されます。

+0

私は応答を感謝します。私はあなたの仕事が(なぜ私は指標を修正したとしても)それほど確かではありませんが、現時点では時間がかかるのですが、それが問題ではないならば、明日の違いについてもっと質問したいと思っています。もう一度、あなたに十分に感謝することはできません! –

2

有効なインデックスはauction[0][*]auction[1][*]です。あなたは、その境界を越えて配列の要素を設定している

+0

私はあなたの編集を試みましたが、それはまだ140でクラッシュしますが、2番目の行のランダムなインデックスはゼロの代わりにランダムな値になっているようです。また、これらのインデックスの中には文字も含まれていますか? –

関連する問題