【发布时间】:2014-04-10 22:58:03
【问题描述】:
我正在尝试动态分配一个二维数组、放置一些值并打印输出。但是,似乎我在 atoi() 函数中获取程序的输入时犯了错误。
基本上,当我们分配一个静态二维数组时,我们将其声明为 int a [3][3]。所以 3 * 3 个单位如果是 int,那么分配了那么多内存。分配动态数组也一样吗?
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
int main(int arg,char* argv)
{
int rows = atoi(argv[1]);
int col = atoi(argv[2]);
int rows =3;
int col=3;
int i,j;
int (*arr)[col] = malloc(sizeof (*arr)*rows);
int *ptr = &(arr[0][0]);
int ct=1;
for (i=0;i<rows;i++)
{
for(j=0;j<col;j++)
{
arr[i][j]=ct;
ct++;
}
}
printf("printing array \n");
for (i=0;i<rows;i++)
{
for(j=0;j<col;j++)
{
printf("%d \t",arr[i][j]);
}
printf("\n");
}
free(arr);
return (0);
}
程序在运行时崩溃。有人可以评论吗?
【问题讨论】:
-
我运行程序为:array 3 3
-
虽然这不是确切问题的答案,但我不会使用双索引数组。最后,它只是连续的内存。像
int *arr = malloc(sizeof(int) * row * col); arr[r * row + c] = ...这样的东西相当于arr[r][c]。 -
将您的声明更改为
int (*arr)[col] = malloc(sizeof(*arr) * rows)。 一切 其他都应该按原样工作。如果您想知道为什么会这样,请考虑int *p = malloc(sizeof(*p) * 10);的工作原理,以及稍后如何使用p[i]访问刚刚分配的10 个值。这没有什么不同。只有底层类型发生了变化。
标签: c arrays multidimensional-array