2017-05-29 75 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',它们应该表示矩阵的大小。也许你可以用这些信息来完成你的答案。 –