代码应该转置一个矩阵:
#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;
}
我试过返回一个数组,使用可变大小的数组,使用不同的语法,甚至更改数组本身而不是使用第二个数组。即使它确实工作了一会儿,转置功能也无法正常工作。现在它给出了段错误/核心转储消息。
最佳答案
你索引 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] << " ";
}
关于c++ - 为什么我的代码给我一个分段/核心转储错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59163489/