[英]Return a pointer to a 2-D array from a C-function
我知道这个问题在这里 , 这里和这里被问过很多次了,但是还没有解决。 我正在尝试用C语言制作一个卡诺地图求解器,我希望我的一个函数将2D数组传递回主函数,所以这是我的程序:
typedef char (*arr)[][4];
int rows;
int main(void){
int noVar;
char *grid;
printf("Please Enter the number of variables: ");
scanf("%d",&noVar);
grid = setMap(noVar);
feedOnes(grid);
}
arr setMap(int noVar){
rows = pow(2,noVar)/4;
char grid[rows][4];
for(int i = 0; i<rows; i++){
for(int j = 0; j<4; j++){
grid[i][j]='0';
}
}
printGrid(grid);
return &grid;
}
这会给我一个4条警告,提示它目前正在工作:
In file included from kmap.c:9:
./setMap.h:33:13: warning: address of stack memory associated with local
variable 'grid' returned [-Wreturn-stack-address]
return &grid;
^~~~
./setMap.h:56:1: warning: control reaches end of non-void function
[-Wreturn-type]
}
^
kmap.c:16:8: warning: incompatible pointer types assigning to 'char *' from
'arr' (aka 'char (*)[][4]') [-Wincompatible-pointer-types]
grid = setMap(noVar);
^ ~~~~~~~~~~~~~
kmap.c:17:12: warning: incompatible pointer types passing 'char *' to parameter
of type 'char (*)[4]' [-Wincompatible-pointer-types]
feedOnes(grid);
^~~~
./setMap.h:36:19: note: passing argument to parameter 'grid' here
int feedOnes(char grid[][4]){
^
我的问题是,我可以解决这些警告吗? 这些警告将来会不会引起任何问题,因为我不知道为什么会出现
另外,我是新手,所以如果这个问题没有正确提出,请不要对我严厉。
谢谢。
数组grid[][]
对于setMap()
函数而言是局部的。 此函数返回后,该变量将不再可用且不在范围内。 局部变量在堆栈存储器中声明。
为了使类似的东西起作用,您将需要分别使用malloc()
和free()
函数调用从堆中 分配和释放内存。
请参考此链接以获取有关堆栈与堆内存的说明:
请参阅此链接以了解C范围 :
https://www.tutorialspoint.com/cprogramming/c_scope_rules.htm
编程愉快!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.