2017-05-29 45 views
-3

我遇到了矩陣問題。我想要一個簡單的矩陣,並根據其他值賦值。Matrix-「訪問衝突寫入位置0x00900B0C」 - C++中的錯誤

我想擁有某物。像這樣:

 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 

我嘗試用代碼來解釋它:

起初我定義一些變量,像

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; 

矩陣在接下來的步驟我想填滿基與零像:

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

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

但它給了我這裏這個錯誤「訪問衝突寫入位置0x00900B0 C「然而..我不明白爲什麼?

而且我的代碼看起來像這樣,以填補矩陣的第一行與inital值:

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

    Matrix[i][0] = 25; 

但主要的問題,我想,和我的代碼的主要部分是其他的填充插件

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文件,但它只是給我的第一行有:通過迭代和闖民宅也neigbour細胞矩陣的矩陣單元正確的值和程序後分解。

+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

所以在這個循環中(從馬蒂斯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]。所以當索引它時不要超出這個範圍。

通常你會用:

size_X = 10; 
size_Y = 1000; 

,改變環路:

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

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

這同樣適用於其他for循環。

你也有這樣的:

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',它們應該表示矩陣的大小。也許你可以用這些信息來完成你的答案。 –