检查矩阵

时间:2017-12-01 22:19:34

标签: c matrix

我正在尝试对二维数组进行一些检查。 问题是我不知道如何:

  • 从用户处获取矩阵的值,并在最后打印 这应该是更小或更大的值。
  • 打印矩阵。
  • 在声明它的函数之外编辑数组。
  • 检查所有值是否不同。

这是我迄今为止所做的:

int main() {
  int m[4][4] = { 
      { 1, 2, 3, 4 }, 
      { 1, 2, 3, 4 }, 
      { 1, 2, 3, 4 },
      { 1, 2, 3, 4 } };
  to_string((int **) m, 4);
  return 0;
}

/*prints the matrix*/
void to_string(int **p, int size) {
  int i, j = 0;
  for (; i < size; i++) {
    j = 0;
    for (; j < size; j++) {
      printf("%d\t", p[i][j]);
    }
    printf("\n");
  }
}

但是我收到了错误:

Segmentation fault (core dumped)

结果应如下所示:

Please enter the size of the matrix:
"3"
Enter 9 values:
"1,2,3,4,5,6,7,8,9"

1 2 3 
4 5 6
7 8 9

所有值都不同!

1 个答案:

答案 0 :(得分:0)

您得到段错误,因为您没有初始化i,并且使用未初始化的变量会调用未定义的行为。将循环更改为for(i=0;i<size; i++){

我的猜测是,i被“初始化”为某个较大的负值(小于size),因此它进入循环并快速溢出p的边界。如果i碰巧被初始化为某个大的正值,那么循环根本就不会执行,我不会期望会出现段错误,但是你也不会打印出来。这就是为什么行为被定义为 undefined ,任何事情都可能发生。

只是我的意见,但我更喜欢在可能的情况下在循环中初始化for循环条件变量。更容易看到那里的初始值,而不是在之前的代码中寻找它的价值是什么。

/*prints the matrix*/
void to_string(int **p, int size){
    int i, j;
    for(i=0; i<size; i++){
        for(j=0; j<size; j++){
            printf("%d\t", p[i][j]);
        }
        printf("\n");
    }
}