2017-05-29 10 views
-3

行列に問題があります。私は単純な行列を持ち、他の値に応じて値を割り当てたいと思っていました。Matrix- "アクセス違反の書き込み場所0x00900B0C" - C++のエラー

私はsthを持っています。このように:私は行列を埋めるために望んでいた次のステップでは、いくつかの変数と

int Matrix[10][1000]; //<-- i´m not sure how to implement a dynamical matrix correctly 
         // so i just defined its size like this 

int i = 0; 
int j = 0; 
int iter=0; 
int Iterator=1000; 

のような行列を定義する最初

 i -->     // i is my x-value and j my y-value in the matrix 
    j 25 25 25 25 25   // inital condition values 
    | 27 26 25 .. ..   // filling the matrix with values depending on a 
    v 31 28 .. .. ..   // border condition, the inital values and neighbour values. 
     .. .. .. .. ..   //and so on 

私はコードでそれを説明しよう

しかし、私にはこのエラーが表示されます。「アクセス違反の書き込み位置0x00900B0 C "まだ..そしてなぜ私は取得していないのですか?

for (i = 0; i <= Size_X; i++) { 

    Matrix[i][0] = 25; 

しかし、私が思う主な問題、そして私のコードの主要な部分は、他のフィルインです:

はさらに私のコードは、inital値で行列の最初の行を埋めるために、このようになります。マトリックス内のセルをneigbourすることも反復し、参照元の行列のセル:

do { 

    for (j = 1; j <= Size_Y; j++) { 

     Matrix[0][j] = Matrix[0][j - 1] + Fo*0.5*(2.0*Bi*(Umgebungstemperatur - Matrix[0][j - 1]) + 2.0*(Matrix[0 + 1][j - 1] - Matrix[0][j - 1]**) + 2.0*Bi*(Umgebungstemperatur - Matrix[0][j]) + 2.0*(Matrix[0 + 1][j] - Matrix[0][j])); 
     Matrix[Size_X][j] = Matrix[Size_X][j - 1] + Fo*0.5*(2.0*Bi*(Umgebungstemperatur - Matrix[Size_X][j - 1]) + 2.0*(Matrix[Size_X - 1][j - 1] - Matrix[Size_X][j - 1]) + 2.0*Bi*(Umgebungstemperatur - Matrix[Size_X ][j]) + 2.0*(Matrix[Anzahl_dx- 1][j] - Matrix[Size_X][j])); 

      for (i = 1; i < Size_X; i++) { 
       Matrix[i][j] = Matrix[i][j - 1] + Fo*0.5*(Matrix[i - 1][j - 1] - 2.0*Matrix[i][j - 1] + Matrix[i + 1][j - 1] + Matrix[i - 1][j] - 2.0*Matrix[i][j] + Matrix[i + 1][j]); 
      } 

    } 

    iter = iter + 1; 

} while (iter != Iterator); 
} 

最後に、私はちょうど.txtファイルまたは.csvファイルに行列を書きたいが、それはちょうど私との最初の行を提供します正しい値とプログラムは後に分解されます。

+0

'size_X'と' size_Y'は何ですか? – 4386427

+0

それはちょうど行列のサイズです - > size_X = 11とsize_Y = 1001 –

+0

私はあなたのループで '<'の代わりに '<='を使っているからです。あなたのマトリックスにインデックス11はありますか?いいえ、ありません。 – ForceBru

答えて

1

size_Xとsize_Yとは何ですか? (コメントに私が尋ねた)

it'sマトリックスのちょうどサイズ - > size_X = 11とsize_Y = 1001(Mattis Seehausからのコメント)

ので、このループでは:

for (i = 0; i <= size_X; i++) { 
    for (j = 0; j <= size_Y; j++) { 

     Matrix[i][j] = 0; 
    } 
} 

Matrix[11][1001]にアクセスしようとします。それはあなたの配列の外にあり、したがってアクセス違反です。配列の最後の要素はMatrix[9][999]です。インデックスを作成するときにはそれを上回らないでください。同じことが他のforのループに適用されます

for (i = 0; i < size_X; i++) {  // Just < instead of <= 
    for (j = 0; j < size_Y; j++) { // Just < instead of <= 

     Matrix[i][j] = 0; 
    } 
} 

size_X = 10; 
size_Y = 1000; 

をして、ループを変更します。

通常は行うだろう。

また、あなたはこれを持っている:

Matrix[Size_X][j] = Matrix[Size_X][j - 1] + Fo*0.5*(
     ^^^^^^ 
    // Again this is an access violation. 

、別のアクセス違反:

 for (i = 1; i < Size_X; i++) { 
      Matrix[i][j] = Matrix[i][j - 1] + Fo*0.5*(Matrix[i - 1][j - 1] - 2.0*Matrix[i][j - 1] + Matrix[i + 1][j - 1] + Matrix[i - 1][j] - 2.0*Matrix[i][j] + Matrix[i + 1][j]); 
                              ^^^^^ 
                          // Again this is an access violation. 

     } 
+0

ありがとうございました!私は私のコードをもう一度チェックする必要があると思う..うまくいけば私はすべての間違いを見つけるだろう:D。再度、感謝します :)。 –

+0

私はこの問題を新しいプロジェクトを開始することで解決しましたが、今のところ働いているという手がかりはありませんが、皆さんありがとうございます!私はあなたのおかげでいくつかの間違いを見つけました! :)!本当に素晴らしいフォーラムです。 –

0

size_Xsize_Yが定義されている場所は表示されません。

はまた、ここで範囲外のだろう:

for (i = 0; i <= size_X; i++) { 
    for (j = 0; j <= size_Y; j++) { 

     Matrix[i][j] = 0; 
    } 
} 

あなたのループを反復処理するときに、<代わりの<=を使用する必要があります。

+0

本当に知っているが、それは私の問題を解決しませんでした。 –

+0

@Link OPは、size_Xとsize_Yがそれぞれ「11」と「1001」であり、マトリックスのサイズを表すべきであるという質問のコメントで精緻化しています。おそらくあなたはその情報であなたの答えを完成させることができます。 –

関連する問題