2012-01-08 23 views
1

私はこのランダムウォークシミュレーションをしばらく実行しており、XcodeからエラーEXC_BAD_ACCESSが得られています。しかし、それはシミュレーションの大部分を印刷します。なぜこのアレイは十分に大きくないのですか?

何らかの理由でメモリが不足していると思われますが、その理由はわかりません。

私はそれを編集したので、エッジの100スペース内に入ることはありません(可変ステップをステップ-100に編集することによって)。これは動作しますが、何が起こっているのか知りたいです。

ご協力いただければ幸いです。

double** places; 
places = (double**) malloc(steps*sizeof(double*)); 
for (int i = 0; i < steps; i++)places[i] = (double*) malloc(2*sizeof(double)); 

for (i = 0; i< steps/*, exit*/; i++) { 
    // Find the angle of movement 
    angle = getRand()*360; 
    // Take a step 
    xPos+= STEP*cos(angle); 
    yPos+= STEP*sin(angle); 
    //Write Step to array 
    places[i][1] = xPos; 
    places[i][2] = yPos; 
    //Write Step to File 
    fprintf(ff, "%d %lf %lf\n",i,xPos,yPos); 
} 

答えて

7

配列インデックスはゼロから始まります。

これを書いているのですか? [1][2]と配列インデックスは、一般ここC.ゼロで開始するので、[0][1]によってインデックス付け、もしインデックスそれら - (places[i]位置)

places[i][0] = xPos; //Zeroth element is considered the first element 
    places[i][1] = yPos; //Second element 
+0

ありがとう!今私は馬鹿のように感じる。私はこれを知っていたが、私はそれを完全に混ぜた。 – Treesrule14

+2

問題ありません。それは私たちの最高に起こります:) – tangrs

0

適切なサイズ(手順x 2)の配列を割り当てましたが、サブアレイの誤ったオフセットに書き込んでいます。 [1]と[2]ではなく、[0]と[1]でなければなりません。

[2]は実際には3番目の配列要素なので、サブアレイの境界の外側に書き込んでいます。

0

内側アレイは二つの要素のためのスペースを有しています。代わりに[0][1]を使用するか、3つの要素に十分な領域を割り当ててください(そして、[0]に割り当てられた領域を無駄にする必要があります)。

0

インデックスは0

から始まるこれは次のようになります。

places[i][0] = xPos; 
places[i][1] = yPos; 
0

あなたは1でオフにしています。 Cの配列は0から始まるので、最初の要素は0になります。

// Write Step to array 
places[i][0] = xPos; 
places[i][1] = yPos; 
関連する問題