矩阵 - "Access violation writing location 0x00900B0C" - C++ 中的错误

Matrix- "Access violation writing location 0x00900B0C" - error in c++

本文关键字:C++ 错误 0x00900B0C writing Access violation 矩阵 location      更新时间:2023-10-16

我有矩阵的问题。我想拥有一个简单的矩阵并根据其他值分配值。

我想拥有STH。这样:

      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;
    }
}

但是它在这里给了我这个错误"访问违规写作位置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-file,但它只是为我带来了第一行,具有正确的值,并且程序在之后分解。

什么是size_x和size_y?(我在评论中问(

这只是矩阵的大小 -> size_x = 11 and 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. 
        }

您不显示size_Xsize_Y定义的位置。

此外,它也脱离了界限:

for (i = 0; i <= size_X; i++) {
    for (j = 0; j <= size_Y; j++) {
        Matrix[i][j] = 0;
    }
}

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