【发布时间】:2026-02-17 02:45:01
【问题描述】:
对于一个学校项目,我们必须用 c 创建一个迷宫,我是该语言的初学者,所以我在一开始就卡住了:动态创建一个数组...
我阅读了有关 malloc 和 calloc 的信息,并尝试使用它但没有成功...
这是我的代码:
/* define maze structure */
typedef struct _maze_t {
int m, n;
char **array;
} Maze;
void constructorArray(int m,int n)
{
array = malloc(m * sizeof *array);
for(i=0;i<m;i++){
array[i]=(char *) malloc(n*sizeof(char));
}
array = calloc(m, sizeof *array);
for (i=0; i<m; i++){
array[i] = calloc(n, sizeof *(array[i]));
}
}
void createMaze(int ncolumn, int mlign)
{
int m=mlign;
int n=ncolumn;
int counter=0;
constructorArray(m,n) ;
char **array;
for(i=0;i<m;i++)
{
for(y=0;y<n;y++)
{
array[i][y]=counter;
counter++;
}
}
}
int main()
{
createMaze(100,100);
return 0;
}
有人可以向我解释一下如何正确操作吗?
【问题讨论】:
-
1) 我看不到
main()2) 缺少返回类型是糟糕学习来源的标志。 -
array=(char **) malloc(1m*sizeof(char *));应该是array = malloc(m * sizeof *array);。1m是语法错误。 -
鉴于
1m之类的拼写错误,看来此代码是手动重新输入的,而不是复制/粘贴的。因此,它仅近似于实际运行的代码。这意味着您的结果将无法可靠地复制。 -
@MichaelWalz 19 年前我在我工作的公司争论说我们应该停止使用奇怪的参数宏,我们必须允许我们的代码在 K&R 和 ANSI C 中编译。所以是的,人们不应该使用它 20 年 IMO。