2016-08-14 4 views
-1

ユーザの入力に依存するゲーム用のダイナミック2D配列を作成しようとしています。私は現在、ここに示すメモリを割り当てている関数を持っています:ユーザ入力に基づいてCで2D配列を作成する

void mallocGrid(int argc, char** argv) { 
    int i; 
    char* height; 
    char* width; 

    int inputHeight = strtol(argv[3], &height, 10); 
    int inputWidth = strtol(argv[4], &width, 10); 

    char** gridArray = malloc(sizeof(char*) * inputHeight); 
    for (i = 0; i < inputHeight; i++){ 
     gridArray[i] = malloc(sizeof(char) * inputWidth); 
    } 
} 

私はこのグリッド配列に '。キャラクター。

. 
. 

. 
. 

. 
. 

が、私は得るために期待していた:ユーザーが2の高さと3の幅を入力すると

void gridInit(int argc, char** argv) { 
    char gridArray[MAX_COLUMN][MAX_ROW]; 
    int i, j; 
    char* height; 
    char* width; 

    int inputHeight = strtol(argv[3], &height, 10); 
    int inputWidth = strtol(argv[4], &width, 10); 

    for(i=0; i < inputWidth; i++) { 
     for(j=0; j < inputHeight; j++) { 
      gridArray[i][j]= '.'; 
      printf("%c\n", gridArray[i][j]); 
     } 
     fputc('\n', stdout); 
    } 
} 

しかし、これが現れるものです:ここで私は、現在持っているものです。

.. 
.. 
.. 

これは、ゲームの進行に合わせて上書きできるグリッドを動的に作成する正しい方法ですか?

+3

あなたの出力を使用すると、動的にこの配列を割り当てる方法とは何の関係もありませんし、単にあなたが 'printf'を関数に渡すかに依存します。 'printf'の最初の呼び出しで' \ n'を取り除くことで、目的の出力を得ることができます。 –

+0

'char **'は2D配列でもなく、1つを指し示すことも、そのまま使用することもできません!そして引数のために自明の名前を使用しました。 'argc'と' argv'は役に立たないものです。彼らはミスリーディングです。 – Olaf

答えて

0

2-Dダイナミックアレイ&の関係はありません。あなたの出力をどのようにしたいのですか?printf( "%c \ n"、gridArray [i] [j]);あなたは期待通りにあなたの出力を得るでしょう。

0

[コメントのためにあまりにも長い]

ここ

void mallocGrid(int argc, char** argv) { 
    ... 

    char** gridArray = malloc(sizeof(char*) * inputHeight); 

、ここ

void gridInit(int argc, char** argv) { 
    char gridArray[MAX_COLUMN][MAX_ROW]; 

    ... 

gridArrayの二つの定義は独立しています。それぞれは独自の変数を定義します。共通しているのではなく、その名前。種類も違います。

両方の変数の定義は、関数が残された瞬間に「消える」。


私は、ユーザの入力に依存しているゲームのための動的2次元配列を作成しようとしています。

あなたはここにこれをしない:

char gridArray[MAX_COLUMN][MAX_ROW]; 
+1

さて、 'malloc'オブジェクトは消えません。彼らはもはやコードから到達できないので、リークします。 – Olaf

関連する問題