这段代码在C中出了什么问题?

时间:2016-06-21 22:32:44

标签: c multidimensional-array struct segmentation-fault

我有类型结构的二维地图,我想初始化结构的条件元素到枚举UNKNOWN。

编译没问题,但它给出了我无法解决的分段错误。

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

非常感谢任何帮助

1 个答案:

答案 0 :(得分: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);