动态分配矩阵上的访问冲突读取位置

时间:2018-02-26 19:39:55

标签: c++ visual-studio matrix access-violation dynamic-allocation

我遇到动态分配矩阵的问题。我收到此错误:“在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;
}

我在第5行得到错误(“ matrix [indexLin] [indexCol] = matrix [indexLin + 1] [indexCol]; ”)。

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

1 个答案:

答案 0 :(得分:1)

您正在读取数组的出站:

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

所以最后一次迭代indexLin等于nrLin -1,但是在matrix[indexLin + 1][indexCol];你读matrix[indexLin(-1 + 1)],这不是导致程序运行的数组的元素。

您可以将其修改为:

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