在动态分配矩阵上的访问违规读数位置

Access violation reading location on dynamic allocated matrix

本文关键字:位置 访问 动态分配      更新时间:2023-10-16

我有动态分配矩阵的问题。我得到此错误:" tema 1.exe中的0x009087Ac丢弃了异常:0xc0000005:访问违规读取位置0xfdfdfdfd。"我要做的是从矩阵中删除一行:

void deleteLine(int **matrix, int &nrLin, int nrCol, int lineDel)
{
    for (int indexLin = lineDel; indexLin < nrLin; indexLin++)
        for (int indexCol = 0; indexCol < nrCol; indexCol++)
            matrix[indexLin][indexCol] = matrix[indexLin + 1][indexCol];
    nrLin--;
}
int main()
{
    int **matrix, nrLines, nrColumns, lineDel;
    ifstream file("datePB4.txt");
    file >> nrLines>> nrColumns;
    matrix= new int *[nrLines];
    for (int index = 0; index < nrLines; index++)
        matrix[index] = new int[nrColumns];
    for (int indexLin = 0; indexLin < nrLines; indexLin++)
        for (int indexCol = 0; indexCol < nrColumns; indexCol++)
            file >> matrix[indexLin][indexCol];
    cin >> lineDel;
    deleteLine(matrix, nrLines, nrColumns, lineDel);
    for (int index = 0; index < nrLines; index++)
        delete matrix[index];
    delete matrix;
    file.close();
    return 0;
}

i在第五行中获取错误(" matrix [indexlin] [indexCol] = matrix [indexlin 1] [indexCol]; "(。

任何帮助将不胜感激,谢谢!

您正在阅读数组的出站:

matrix[indexLin][indexCol] = matrix[indexLin + 1][indexCol];

因此,最后一个迭代indexlin等于 nrLin -1,这还可以,但是在 matrix[indexLin + 1][indexCol];中,您读取matrix[indexLin(-1 + 1)],这不是导致程序carsh的数组的弹性。

您可以将其修改为:

for (int indexLin = lineDel; indexLin < nrLin - 1; indexLin++) // here solves the problem in order not to read matrix[indexLen]
    for (int indexCol = 0; indexCol < nrCol; indexCol++)
        matrix[indexLin][indexCol] = matrix[indexLin + 1][indexCol];