代码的作用是转置一个矩阵:
#include <iostream>
#include <string>
#include <cmath>
#include <stdio.h>
using namespace std;
void transpose(int (&matrix)[3][3] ){
int t[3][3];
int rows = 3, columns = 3;
for(int i = 0; i < rows; i++){
for(int ii = 0; ii < columns; ii++){
t[ii][i] = matrix[i][ii];
}
}
for(int i = 0; i < rows; i++){
for(int ii = 0; ii < columns; ii++){
matrix[i][ii] = t[i][ii];
}
}
}
int main(){
int m[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
};
int i = 0, ii = 0;
int rows = 3;
int cols = 3;
for(i = 0; i < rows; i ++){
for(ii = 0; ii < cols; i++){
cout << m[i][ii] << " ";
}
cout << "\n";
}
transpose(m);
cout << "\n" << endl;
for(i = 0; i < rows; i ++){
for(ii = 0; ii < cols; i++){
cout << m[i][ii] << " ";
}
cout << "\n";
}
return 0;
}我尝试过返回一个数组,使用可变大小的数组,使用不同的语法,甚至更改数组本身而不是使用第二个数组。即使转置功能工作了一阵子,它也不能正常工作。现在,它给出了分段故障/核心转储消息。
发布于 2019-12-04 02:50:17
您对m的索引超出范围:
for(i = 0; i < rows; i ++){
for(ii = 0; ii < cols; i++) { // note that you increase i, not ii, here
cout << m[i][ii] << " ";
}
cout << "\n";
}在main()的两个内部循环中都会犯同样的错误。解决方案是将内部循环更改为:
for(ii = 0; ii < cols; ii++) { // increase ii instead
cout << m[i][ii] << " ";
}https://stackoverflow.com/questions/59163489
复制相似问题