c++ - 为什么我的代码给我一个分段/核心转储错误?

标签 c++ arrays loops matrix transpose

代码应该转置一个矩阵:

#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/

相关文章:

c++ - C++ 中的 HashedWheelTimer?

Python 3 : Returning variable through multiple functions

c - 为第 4 个字母停止的循环

c++ - fopen 和 fwrite 从多个线程到同一个文件

c++ - 2012 年 1 月 C++11 工作草案 "Source"格式?

c++ - "Expected Class name"继承错误

javascript - 在 Javascript 中对嵌套数组进行分组

c# - 将一维数组显示为行和列

java - 单击时显示 View ( Activity )中相关的数据

c - 本来应该是无限循环的,但是execv之后就停止了