C++矩阵转置函数代码优化与内存管理分析
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;
}//将矩阵转置
代码审查:
上述代码旨在将给定矩阵进行转置,但存在以下问题:
- 内存分配:
result声明为指针数组,但其元素未初始化,这可能导致未定义的行为。 - 内存泄漏:
a声明为指针数组,但其元素未被正确释放,这可能导致内存泄漏。 - 数组索引:
result数组的索引使用i和j,但应分别使用j和i来正确转置矩阵。
修正后的代码:
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;
}
修正后的代码正确地转置了矩阵,释放了内存并避免了内存泄漏。
原文地址: https://www.cveoy.top/t/topic/ljJb 著作权归作者所有。请勿转载和采集!