2015-11-16 4 views
0

Я делаю игру в c, и я получаю сообщение об ошибке с созданным мной массивом struct.C segment segmentation fault

typedef struct{ 
    int type, level, x, y, w, h; 
} Tile; 

Tile *map[256]; 
Tile *t; 
t->type = 0; 
t->level = 0; 
t->x = 0; 
t->y = 0; 
t->w = 0; 
t->h = 0; 
map[0] = t; 

После компиляции, программа печатает: Segmentation fault (core dumped)

+0

Уверенный делает. Вы определяете указатели, но не указываете их на действительные объекты. – Olaf

+0

Не могли бы вы рассказать? –

+2

Пожалуйста, прочитайте о распределении памяти, указателях и C в целом. Не обижайтесь, но просто чтение хорошей книги C поможет вам гораздо больше, чем простой комментарий и любой конкретный ответ. – Olaf

ответ

2

Определение указателя автоматически не делает этот указатель, чтобы указать на правильное местоположение памяти. Указатель, который не является выделенной памятью, называется неинициализированным указателем и не может (, скажем, не должен?) быть отменен.

В коде

t->type = 0; 

и так далее, вы де ссылок t, не выделенной памяти. Следовательно, путем удаления ссылки на униализированный указатель вы вызываете undefined behavior. Ошибка сегментации является одним из многих побочных эффектов UB.

Решение: вам необходимо выделить память t, прежде чем вы сможете реально разыменовать ее. Возможно, вы можете взглянуть на malloc() и на семейство функций, чтобы получить выделение памяти.

+0

ОК, так как же мне это сделать? –

+0

@DJGee Как я уже сказал, вам нужно сначала выделить память указателю. –

+1

@ DJGee Определенно нужно следовать совету Олафа. –