Matrix-“访问冲突写入位置0x00900B0C” - c ++中的错误

时间:2017-05-29 17:33:07

标签: c++ matrix

我遇到了矩阵问题。我希望有一个简单的矩阵,并根据其他值赋值。

我想要......像这样:

      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;

在下一步中,我想用Zero填充矩阵,如:

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

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

但它在这里给我这个错误“访问违规写入位置0x00900B0C”但是......我不明白为什么?

此外,我的代码看起来像是用初始值填充矩阵的第一行:

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

    Matrix[i][0] = 25;

但我想的主要问题是,我的代码的主要部分是迭代并引用矩阵中的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文件,但它只是给了我第一行的正确值,程序就破坏了。

2 个答案:

答案 0 :(得分:1)

size_X和size_Y是什么? (我在评论中问道)

  

只是矩阵的大小 - &gt; 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]。所以在索引它时不要超过它。

通常你会这样做:

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. 

        }

答案 1 :(得分:0)

您无法显示size_Xsize_Y的定义位置。

这也超出了界限:

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

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

在迭代循环时,您应该使用<而不是<=