2016-12-03 10 views
0

この質問はherehereおよび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]){ 
       ^

私の質問は、私はこれらの警告を解決することができ、ありますか?この質問は適切に頼まれていなかった場合、彼らはまた

を登場している理由を私は知らないとして、これらの警告は、将来の任意の問題を引き起こすだろう、私は初心者ですので、私の過酷なことしないでください。..

ありがとうございました。

+0

はい、feedOnesは出力を印刷するプログラムです。他には何もありません – sameer

+0

重複がありますか?配列へのポインタを返すことはできません。通常は、配列を作成してポインタとして関数に渡し、同じスコープで呼び出される関数を含めて、作成したスコープ内の配列で必要な操作を行います。しかし、それを返すことは問題になります。なぜなら、スコープが外れたときに割り当てを解除する方法で割り当てられるからです。 –

+0

あなたのリンクで提案されたことを実際に試してみることができます "ここ、ここ、ここ" –

答えて

0

アレイgrid[][]は、setMap()機能のローカルです。この関数が復帰すると、変数は使用できなくなり、範囲外になります。 ローカル変数ので宣言されています。

あなたがにする必要がありますこのような何かが動作するためには、malloc()free()機能を使用してヒープからDEALLOCATEメモリを割り当てるそれぞれ呼び出します。

https://www.tutorialspoint.com/cprogramming/c_scope_rules.htm

ハッピープログラミング:Cスコーピングのために、このリンクを参照してください

What and where are the stack and heap?

はヒープメモリー対スタック上の明確化のために、このリンクを参照してください!

関連する問題