この質問はhere、hereおよびhereと何度も何度か尋ねられましたが、何かがまだ機能していないことがわかります。C関数からの2次元配列へのポインタを返します
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回の警告を与える:私はCでのカルノー図ソルバーをしようとしていると私は、main関数に戻って2次元配列を渡すために私の関数のいずれかをしたいので、ここで私のプログラムであります今の仕事をしていません:
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]){
^
私の質問は、私はこれらの警告を解決することができ、ありますか?この質問は適切に頼まれていなかった場合、彼らはまた
を登場している理由を私は知らないとして、これらの警告は、将来の任意の問題を引き起こすだろう、私は初心者ですので、私の過酷なことしないでください。..
ありがとうございました。
はい、feedOnesは出力を印刷するプログラムです。他には何もありません – sameer
重複がありますか?配列へのポインタを返すことはできません。通常は、配列を作成してポインタとして関数に渡し、同じスコープで呼び出される関数を含めて、作成したスコープ内の配列で必要な操作を行います。しかし、それを返すことは問題になります。なぜなら、スコープが外れたときに割り当てを解除する方法で割り当てられるからです。 –
あなたのリンクで提案されたことを実際に試してみることができます "ここ、ここ、ここ" –