我正在尝试用 C 语言制作一个迷宫生成器,但由于某种原因我收到了警告。如果答案与内存分配有关,请深入解释,因为我不知道它是如何工作的。
#include <stdlib.h>
#include <stdio.h>
unsigned char ** gen(int w, int h){
unsigned char maze[w+2][h+2];
for(int i=0; 1<w; i++){
if(i==0 || i==w-1){
for(int j=0; j<h; j++){
maze[i][j]=1;
}
}else{
for(int j=0; j<h; j++){
if(j==0 || j==h-1){
maze[i][j]=1;
}else{
maze[i][j]==0;
}
}
}
}
return maze;
}
我在互联网上查了一下,但没有找到任何有效的方法。
您声明了一个具有自动存储期限的局部变长二维数组
unsigned char maze[w+2][h+2];
退出该函数后,该函数将不复存在。
所以从函数中返回它是没有意义的。从函数中取消引用返回的指针将调用未定义的行为。
至于编译器消息,则返回语句中使用的数组
return maze;
隐式转换为类型
unsigned char ( * )[h+2]
。
但是函数的返回类型是
unsigned char **
nsigned char ** gen(int w, int h){
这些指针类型不兼容。