C++ 矩阵转置代码错误分析与修正
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],确保了每一行分配了正确的列数。 - 其余代码逻辑保持不变,实现了矩阵转置的功能。
总结:
通过分析代码错误并进行修正,我们成功解决了矩阵转置代码中的问题。在编写代码时,要格外注意内存分配和数组访问的正确性,以避免潜在的错误。
原文地址: https://www.cveoy.top/t/topic/ljIn 著作权归作者所有。请勿转载和采集!