首页 > 解决方案 > 带 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");
  }

}

标签: carrayspointersmalloc

解决方案


推荐阅读