矩阵中的分割故障



我尝试在C中创建一个矩阵并具有一些输入值,但是我不知道为什么它给我抛出了"分割错误"。这是我的代码:

#include <stdio.h> 
#include <stdlib.h>
int main() {
    int i;
    int j;
    int **a;
    a = malloc(5 * sizeof(int));
    for (i = 0; i < 5; i++) {
      a[i] = malloc(4 * sizeof(int));
    }
    for (i = 0; i < 5; i++) {
      for (j = 0; j < 4; j++) {
        scanf("%d", (a[i][j]));
      }
    }
    return 0;
}

给出了@bathsheba的答案,这就是您的代码应该是:

#include <stdio.h>
#include <stdlib.h>
int main (void)
{
  int (*a)[4] = malloc( sizeof(int[5][4]) );
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      scanf("%d", &a[i][j]);
    }
  }
  free(a);
  return 0;
}
  1. 您对a的分配应为

a=malloc(5*sizeof(int*));

很好地注意sizof中的指针类型。在某些系统(2000年代初的Windows桌面)上,int恰好与int*的大小相同,但是您>不得假设。

  1. scanf指针作为参数:最清晰的写作方法是 scanf("%d", &a[i][j]);

  2. 不要忘记free完成后的内存。

最后,每次看到这样的矩阵时,我都会在内部死去。当然,它允许您使用[][]符号,但通常最好将其建模为连续的内存块,然后使用IDIOM i * columns + j(i, j)处访问元素。

相关内容

  • 没有找到相关文章

最新更新