收到“从不兼容的指针类型返回”警告,但我不明白为什么

问题描述 投票:0回答:1

我正在尝试用 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;
}

我在互联网上查了一下,但没有找到任何有效的方法。

c pointers
1个回答
0
投票

您声明了一个具有自动存储期限的局部变长二维数组

unsigned char maze[w+2][h+2];

退出该函数后,该函数将不复存在。

所以从函数中返回它是没有意义的。从函数中取消引用返回的指针将调用未定义的行为。

至于编译器消息,则返回语句中使用的数组

return maze;

隐式转换为类型

unsigned char ( * )[h+2]

但是函数的返回类型是

unsigned char **

nsigned char ** gen(int w, int h){

这些指针类型不兼容。

© www.soinside.com 2019 - 2024. All rights reserved.