【问题标题】:Dynamic memory allocation in 2d array二维数组中的动态内存分配
【发布时间】:2014-03-19 14:10:23
【问题描述】:

scanf 声明给我带来了麻烦。我试过用&arr[i][j](arr+i)+j 代替*(arr+i)+j。但是,这种说法仍然存在问题。这是我的代码:

int **arr, m, n, i, j;
scanf("%d%d", &m, &n);
arr = (int **) malloc( m * sizeof(int *) );

for (i = 0; i < m; i++)
  arr[m] = (int *) malloc(n*sizeof(int));

for(i = 0; i < m; i++)
  for(j = 0; j < n; j++)
    scanf("%d", *(arr + i) + j); //this statement

for(i = 0; i < m; i++) {
  for(j = 0; j < n; j++) {
    printf("%d ", *(*(arr + i) + j));
  printf("\n");
}

getch();
return 0;

【问题讨论】:

  • (*arr)[i][j] 呢?
  • 请展示一个简单的输入格式示例。
  • @timrau 首先我希望用户在 m 和 n 变量中分别输入行数和列数,然后我尝试为它们分配内存。然后用户将输入数字
  • @timrau 是的,我也包括了
  • 与实际问题无关,但don't cast malloc

标签: c malloc scanf


【解决方案1】:

有一个严重的错字:

  arr[m] = (int *) malloc(n*sizeof(int));

应该是

  arr[i] = malloc(n * sizeof(int));

【讨论】:

  • 我也试过 &arr[i][j] ,它不起作用。我的调试器在此语句处停止。我使用malloc的方式有问题吗?看起来我以错误的方式使用地址
  • 由于您调用malloc 的方式看起来不错,我们需要您的输入格式来诊断问题。
  • 当您的调试器停止时有任何消息吗?它在等待您的输入吗?
  • 错误类似:spiral.exe 中 0x0f75effe 处的未处理异常:0xC0000005:访问冲突写入位置 0xcdcdcdcd。
  • 首先我希望用户分别在 m 和 n 变量中输入行数和列数,然后我尝试为它们分配内存。然后用户将输入数字输入样本:3 4 1 2 3 4 5 6 7 8 9 10 11 12 其中 3 和 4 是行数和列数
猜你喜欢
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多