我遇到动态分配矩阵的问题。我收到此错误:“在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]; ”)。
任何帮助将不胜感激,谢谢!
答案 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];