C++ 矩阵转置代码错误分析与修正

以下代码实现矩阵转置,但存在错误:

int** transposeMatrix(int **a, int row,int col){
    int** result = new int*[col];
    for(int i=0; i<row; i++){
        a[i] = new int[row];
    }
    for (int i = 0; i < row; ++i) {
        for (int j = 0; j < col; ++j) {
            result[i][j]=a[j][i];
        }
    }
    return result;

}

错误分析:

代码中的问题出现在第7行:a[i] = new int[row]。该语句试图在原矩阵 a 的每一行分配 row 个元素,但实际上应该分配 col 个元素。因为转置后的矩阵列数应该与原矩阵的行数相同。

修正后的代码:

int** transposeMatrix(int **a, int row,int col){
    int** result = new int*[col];
    for(int i=0; i<row; i++){
        a[i] = new int[col];
    }
    for (int i = 0; i < row; ++i) {
        for (int j = 0; j < col; ++j) {
            result[i][j]=a[j][i];
        }
    }
    return result;

}

解释:

  • 第7行代码改为 a[i] = new int[col],确保了每一行分配了正确的列数。
  • 其余代码逻辑保持不变,实现了矩阵转置的功能。

总结:

通过分析代码错误并进行修正,我们成功解决了矩阵转置代码中的问题。在编写代码时,要格外注意内存分配和数组访问的正确性,以避免潜在的错误。

C++ 矩阵转置代码错误分析与修正

原文地址: https://www.cveoy.top/t/topic/ljIn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录