带malloc的二维数组

时间:2019-06-01 20:01:03

标签: c arrays pointers malloc

我正在学习C,并且正在为练习目的编写程序时遇到问题。

在此程序中:在用户设置表的行和列之后,我通过分配内存来创建动态二维表(数组)。

但是,仅当表的行设置为非常低的值(例如,行)时,程序才会执行到最后。最多2-3行
设置更多的行数将导致程序退出。

查看程序运行到最后并最终在其中打印表的值的唯一方法是尽早暂停执行(就像您在下面粘贴的以下代码中看到的那样)。

此行为是否有任何解释?我有什么想念的或者做错了吗?

main()
{
  int **p; 
  int i, j, N, M;

  printf("Set Table Rows: ");
  scanf("%d", &M);
  printf("Set Table Columns: ");
  scanf("%d", &N);

  p = malloc(sizeof(int) * M);

  system("echo \"Press any button to continue\"");
  system("read");
  if (!p)
  {
    printf("Memory Allocation Failed!");
    exit(0);
  }

  for (i = 0; i < M; i++)
  {
    p[i] = malloc(sizeof(int) *N);
    if (!p[i])
    {
      printf("Memory Allocation Failed!");
      exit(0);
    }
  }
  for (i = 0; i < M; i++)
  {
    for (j = 0; j < N; j++)
    {
      p[i][j] = (i+2) * (j+1);
    }
  }


  printf("\n-------------------\n");
  for (i = 0; i < M; i++)
  {
    for (j = 0; j < N; j++)
    {
      printf("%d\t",p[i][j]);
    }
    printf("\n");
  }

}

0 个答案:

没有答案