嘿,大家我重新学习C++做一些黑客级别的挑战,并得到一个段错误的错误。该程序应该考虑矩阵的维数并计算两个对角线,然后将它们相加。我很确定错误在于2d数组如何传递给computeMainDiagonal和computeSecondaryDiagonal函数。谢谢您的帮助 !C++通过值传递数组导致段错误
int ComputeMatrixMainDiagonal(int matrixDimensions, int* matrix){
int rowIndent = 0;
int diagonalValue;
for(int i = 0;i < matrixDimensions;i++){
diagonalValue =+ (&matrix)[i][rowIndent];
rowIndent++;
}
return diagonalValue;
}
int ComputeMatrixSecondaryDiagonal(int matrixDimensions, int* matrix){
int rowIndent = matrixDimensions;
int diagonalValue;
for(int i = matrixDimensions;i > 0;i--){
diagonalValue =+ (&matrix)[i][rowIndent];
rowIndent--;
}
return diagonalValue;
}
int main() {
int matrixDimension;
int differenceAcrossSumsOfDiagonal;
int matrixMainDiagonal;
int matrixSecondaryDiagonal;
int * matrixPointer;
cin >> matrixDimension; //get matrix dimensions
int matrix[matrixDimension][matrixDimension]; //declare new matrix
for(int index = 0; index < matrixDimension;index++){ //populate matrix
for(int i = 0; i < matrixDimension;i++){
cin >> matrix[index][i];
}
}
matrixMainDiagonal = ComputeMatrixMainDiagonal(matrixDimension,&matrix[matrixDimension][matrixDimension]);
matrixSecondaryDiagonal = ComputeMatrixSecondaryDiagonal(matrixDimension,&matrix[matrixDimension][matrixDimension]);
differenceAcrossSumsOfDiagonal = (matrixMainDiagonal + matrixSecondaryDiagonal);
cout << differenceAcrossSumsOfDiagonal;
return 0;
}
声明“int matrix [matrixDimension] [matrixDimension]”是无效的C++(它是C99 VLA)。使用的索引是1。 C++原始数组索引是基于0的。这就是说你应该自己调试你的代码。诚然,有些人只能看代码并发现它有什么问题,但如果将所有小问题分发给其他人,你永远无法获得任何地方。 –
'&matrix [matrixDimension] [matrixDimension]'在矩阵后面提供一个地址。 –
@MartinZabel这就是所谓的红丸吗? –