C++矩阵转置函数代码优化与内存管理分析

原始代码:

int** transposeMatrix(int **a, int row,int col){
    int** result = new int*[col];
    for(int i=0; i<col; 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;

}//将矩阵转置

代码审查:

上述代码旨在将给定矩阵进行转置,但存在以下问题:

  1. 内存分配: result 声明为指针数组,但其元素未初始化,这可能导致未定义的行为。
  2. 内存泄漏: a 声明为指针数组,但其元素未被正确释放,这可能导致内存泄漏。
  3. 数组索引: result 数组的索引使用 ij,但应分别使用 ji 来正确转置矩阵。

修正后的代码:

int** transposeMatrix(int **a, int row, int col) {
    int** result = new int*[col];
    for(int i = 0; i < col; i++) {
        result[i] = new int[row](); // 初始化元素为0
    }
    for (int i = 0; i < row; ++i) {
        for (int j = 0; j < col; ++j) {
            result[j][i] = a[i][j]; // 正确的数组索引
        }
    }
    for(int i = 0; i < col; i++) {
        delete[] a[i]; // 释放元素
    }
    delete[] a; // 释放数组
    return result;
}

修正后的代码正确地转置了矩阵,释放了内存并避免了内存泄漏。

C++矩阵转置函数代码优化与内存管理分析

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

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