2016-06-21 6 views
-2

私は型構造の2次元マップを持っている、と私はUNKNOWN列挙するために、構造体の条件要素を初期化したいです。Cでこのコードの何が問題になっていますか?

コンパイルはOKですが、それは私が解決することはできませんセグメンテーションフォールトを与えます。

#include<stdio.h> 

enum myenum {EXPLORED, UNKNOWN,}condition; 
struct tile { 
    int x; 
    int y; 
    int condition; 
    }; 

struct tile* map[8][8]; 
void init_map() { 
    for (int i = 0; i < 8; i++) { 
     for (int j = 0; j < 8; j++) { 
      map[i][j]->condition = UNKNOWN; 
     } 
     printf("\n"); 
    } 
} 
void print_map() { 
    for (int i = 0; i < 8; i++) { 
     for (int j = 0; j < 8; j++) { 
      printf("%d ", map[i][j]->condition); 
     } 
     printf("\n"); 
    } 
} 

void main() { 

init_map(); 
print_map(); 
} 

任意のヘルプは非常にあなたのプログラムに誤りがmapが任意のオブジェクトを指すように割り当てられていなかったんポインタの配列であるということである

+3

を使用しますが、実際には何を指すようにポインタ自身を初期化することはありません。将来的には – user2357112

+0

デバッガでプログラムを実行します - '**ポインタへ**いいえあなたはの_2D配列を持っている - あなたは、少なくともそれは強打 – pm100

+1

がどこに行くか見るようになるだろう「私は型構造の2次元マップを持っています」構造体_!それはまさにあなたの問題です! (文の残りの部分で何を意味するか) – Olaf

答えて

2

を高く評価しています。したがって、未定義の動作に

 map[i][j]->condition = UNKNOWN; 

 printf("%d ", map[i][j]->condition); 

結果。

あなたはポインタの配列を必要とする理由は明らかではありません。あなたはオブジェクトの配列を使うことができます。

struct tile map[8][8]; // Drop the pointer 

 map[i][j].condition = UNKNOWN; 

 printf("%d ", map[i][j].condition); 
+0

ありがとう、今それは動作します – Hussain

関連する問題