首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的代码给我一个分段/核心转储错误?

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

Stack Overflow用户
提问于 2019-12-04 02:46:02
回答 1查看 33关注 0票数 0

代码的作用是转置一个矩阵:

代码语言:javascript
运行
复制
#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;
}

我尝试过返回一个数组,使用可变大小的数组,使用不同的语法,甚至更改数组本身而不是使用第二个数组。即使转置功能工作了一阵子,它也不能正常工作。现在,它给出了分段故障/核心转储消息。

EN

回答 1

Stack Overflow用户

发布于 2019-12-04 02:50:17

您对m的索引超出范围:

代码语言:javascript
运行
复制
    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()的两个内部循环中都会犯同样的错误。解决方案是将内部循环更改为:

代码语言:javascript
运行
复制
        for(ii = 0; ii < cols; ii++) {  // increase ii instead
            cout << m[i][ii] << " ";
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59163489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档