2016-06-21 39 views
-2

我有类型结构的二维地图,我想初始化结构的条件元素枚举UNKNOWN。这段代码在C中有什么问题?

编译正常,但它给出了我无法解决的分段错误。

#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(); 
} 

任何的帮助深表感谢

+3

你从来没有真正初始化的指针本身指向任何东西。 – user2357112

+0

将来在调试器下运行程序 - 您至少会看到它的位置在哪里爆炸 – pm100

+1

“我有2-D类型结构的地图” - 不。您有一个_2D数组的**指向**' struct'_!这正是你的问题! (你对这句话的其余部分是什么意思) – Olaf

回答

2

错误在你的程序是,map是一个永远不会被分配给指向任何对象的指针数组。因此,

 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