C:转置矩阵,分段错误

时间:2017-11-06 07:19:21

标签: c arrays matrix transpose

我在从教科书中做矩阵转置问题时遇到了一些麻烦 学习C来自。

当代码运行时,它输出大量的任意数字,然后是"分段错误(核心转储)"。

在查看类似问题的其他答案时,大多数都涉及指针/标志,但书尚未到达那个阶段,所以问题应该在没有它们的情况下解决。

Q值。编写一个transposeMatrix函数,它将4x5矩阵和5x4矩阵作为参数。具有转换4x5矩阵的功能并将结果存储在5x4矩阵中。还要写一个主程序来测试函数。

#include <stdio.h>

void transposeMatrix (int matrix1[4][5], int matrix2[5][4])
{
int i, j;

for(i = 0; i < 4; ++i) {
    for(i = 0; i < 5; ++i) {
        matrix2[j][i] = matrix1[i][j];
    }
}

for(i = 0; i < 5; ++i) {
    for(j = 0; j < 4; ++i) {
        printf("%i ", matrix2[i][j]);
    }
    printf("\n");
}
}

int main (void) 
{
void transposeMatrix (int matrix1[4][5], int matrix2[5][4]);
int imatrix2[5][4]; 

int imatrix1[4][5] = 
  { 
    {5, 6, 7, 8, 9},
    {1, 2, 3, 4, 5},
    {5, 4, 3, 2, 1},
    {9, 8, 7, 6, 5}
  };


transposeMatrix(imatrix1, imatrix2);

return 0;
}

2 个答案:

答案 0 :(得分:2)

for(i = 0; i < 4; ++i) {
    for(i = 0; i < 5; ++i) {
        matrix2[j][i] = matrix1[i][j];
    }
}

这里的内循环计数器应该是j,但你已经使用了i,它也在制作

matrix2[j][i] = matrix1[i][j];

此语句使用未初始化的j值导致未定义的行为

答案 1 :(得分:1)

你刚在几个地方使用了错误的循环变量。在第一个循环中:

for(i = 0; i < 4; ++i) {
    for(i = 0; i < 5; ++i) {

应该是:

for(i = 0; i < 4; ++i) {
    for(j = 0; j < 5; ++j) {

(即在内循环中将i更改为j

此外,在第二个循环中,以下内容:

for(i = 0; i < 5; ++i) {
    for(j = 0; j < 4; ++i) {

应该是:

for(i = 0; i < 5; ++i) {
    for(j = 0; j < 4; ++j) {
在内循环中

(即增量j,而不是i