2017-04-10 2 views
0

円を計算するときにプログラムが54行目でクラッシュするように見えます[3] [6]。これを引き起こす原因は何ですか?私はいくつかの情報を見つけるためにたくさんの声明文を入力しました。すべてが正確になるまでうまくいっているようです。[3] [6]、それは特別なことではないようです。フロートをランダム化した後にプログラムがクラッシュする

int main() { 

double a, b, circleXMax, circleYMax, circleRMax; 
double rand_float(double a, double b); 
int i, j; 
int circleInfo = 3; 
int circleNum = 50; 
int PI = 3.14; 
double circleArea; 
double circleAreaMax = 0; 
double circles[circleInfo][circleNum]; 

printf("Opened \n"); 

for(i = 1; i <= circleNum; i++) { 
    printf("Start of i = %d \n", i); 
    for(j = 1; j <= circleInfo; j++) { 
     printf("Start of j = %d \n", j); 
     if(j == 1 || j == 2) { 
      printf("Start of randomization of j (%d) \n", j); 
      circles[j][i] = rand_float(100.00, 900.00); 
      printf("circles[%d][%d] = %f \n", j, i, circles[j][i]); 
     } 
     else { 
      printf("Start of randomization of j (%d) \n", j); 
      circles[j][i] = rand_float(0.00, 100.00); 
      printf("circles[%d][%d] = %f \n", j, i, circles[j][i]); 
     } 
    } 
    printf("Start of calculation of circleArea \n"); 
    circleArea = PI * circles[3][i] * circles[3][i]; 
    printf("Completed calculation of circleArea = %f \n", circleArea); 
    if(circleArea >= circleAreaMax) { 
     printf("circle was larger then maximum current \n"); 
     circleAreaMax = circleArea; 
     circleXMax = circles[1][i]; 
     circleYMax = circles[2][i]; 
     circleRMax = circles[3][i]; 
    } else { 
     printf("circle was NOT larger then maximum current \n"); 
    } 
} 

printf("Circle with largest area (%f) has\n", circleAreaMax); 
printf("center (%f, %f) and radius %f", circleXMax, circleYMax, circleRMax); 

    } 

    double rand_float(double a, double b) { 
     printf("doing a randomization via rand_float \n"); 
     return (((double)rand()/RAND_MAX)*(b-a))+a; 
    } 

それは言って後にクラッシュ:

"Jのスタート= 3"

"スタート(3)Jのランダム化の"

"rand_floatを経由してランダム化を行っています"

+4

アレイインデックスは「0」から始まり、サイズマイナス1になることを覚えていますか? –

+0

@エヴァンあなたは実際に前のコメントを理解しましたか?私はそうは思わない。 –

答えて

5

私が気づく問題は、ループ境界です。どちらの場合も

for(i = 1; i <= circleNum; i++) 

for(j = 1; j <= circleInfo; j++) 

原因off-by-one error

C配列には0から始まるインデックスが付いているため、<type> arr[m][n]のように定義された配列の場合、可能な限り有効な有効なインデックスはarr[m-1][n-1]となります。

、請求、いくつかの他のコメント:

  • あなたはmain()内の関数宣言を持って、彼らは全体の翻訳単位に見えるように、ファイルスコープにする必要があります。それ以外の場合は、main()とそれ以降に定義された関数だけが利用可能な宣言を持ちます。
  • int main()は、ホストされた環境が、有効な署名と明示的に定義されている特別な環境を使用していない限り、標準に準拠するように()にする必要があります。
+1

私はそれがmとnに保存できると思ったが、間違っていた、ありがとう! – Evan

+0

@StoryTeller私は、後で私の意図は、実際には見ませんでした。混乱を解消するために言葉を改善する方法に関する提案はありますか?前もって感謝します。 :) –

関連する問題