C ++按值传递数组导致段错误

时间:2015-11-18 21:29:21

标签: c++ c arrays

嘿大家我通过做一些黑客等级挑战重新学习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;
}

1 个答案:

答案 0 :(得分:1)

您可能会发生细分错误,因为&matrix[matrixDimension][matrixDimension]并不代表您认为的含义。你的问题标题表明你认为这是一种通过值传递数组的方法(虽然你为什么要这样做会逃避我),但是按值传递和传递引用是一个问题如何是声明,而不是它是如何被调用的。

表达式&matrix[matrixDimension][matrixDimension]将是矩阵的matrixDimension行的matrixDimension元素的地址。这超出了矩阵的范围,因为数组的最大索引比数组维度小1。但是,即使你写了&matrix[matrixDimension - 1][matrixDimension - 1],也不会是你想要的。你想要数组的第一个元素的地址,&matrix[0][0]或简单地matrix,尽管由于具有不同的类型(对应于不同的感官),它们是不相等的。 matrix的元素是什么。)