大家好,我正在通过一些黑客排名挑战来学习C ++,并且遇到了段错误。该程序应考虑矩阵的尺寸并计算两个对角线,然后将它们相加。我很确定错误在于2D数组如何传递给computeMainDiagonal和computeSecondaryDiagonal函数。谢谢您的帮助 !
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;
}
最佳答案
您的细分错误很可能是因为&matrix[matrixDimension][matrixDimension]
并不代表您的意思。您的问题标题表明您认为这是一种按值传递数组的方法(尽管您为什么要这样做逃避了我的注意),但是按值传递与按引用传递是函数如何处理的问题被声明,而不是如何调用。
表达式&matrix[matrixDimension][matrixDimension]
是矩阵第matrixDimension
行的第matrixDimension
个元素的地址。这超出了矩阵的范围,因为数组的最大索引比数组维数小1。即使您写了&matrix[matrixDimension - 1][matrixDimension - 1]
,也不会是您想要的。您需要数组的第一个元素的地址,即&matrix[0][0]
或简单地称为matrix
,尽管由于类型不同(对应于matrix
元素的含义不同),它们是不等价的。