2014-10-16 4 views
0

Yay. Ошибка сегментации.ошибка сегментации при заполнении структуры C, суженная до линии

Однако я сузил его до точной линии, которая вызывает ошибку сегментации.

Вот соответствующие фрагменты кода: Итак, вот структура, которую я определил.

typedef struct { 
    int placeID; 
    char *city; 
    char *continent; 
    char *cultural; 
    char *outdoors; 
    int dist_from_source; 
} place_t; 

Вот моя инициализация из place_t:

place_t *temp_place=NULL; 

и линии, которая вызывает ошибку сегм является:

temp_place->placeID=tmp; 

где TMP это просто INT со значением 1.

Я уверен, что это просто какая-то глупая логика указателя, на которую я на мгновение слеп, но любая помощь будет действительно оценена d!

Спасибо.

+1

Вы разыскиваете нулевой указатель ... вы должны сделать точку «temp_place» в каком-то выделенном хранилище, прежде чем сможете попытаться написать через него. –

+0

Должен ли я malloc некоторое пространство для инициализации? –

+0

Это было бы в одну сторону, да –

ответ

1

Вам нужно выделить память для указателя структуры первого:

place_t *temp_place=malloc(sizeof(struct place_t)); //allocate memory first 
    temp_place->placeID=tmp;        //assign values 
0

В общем, всякий раз, когда вы определяете указатель на структуру, можно определить место в памяти, которая может хранить адрес этой структуры.

Но пока вы не выделили память для этой структуры (например, с помощью malloc или calloc) и присвоили адрес этой памяти указанному выше указателю, вы не сможете использовать ее, поскольку она указывает на ничего (или, скорее, doesn Не указывайте на что-нибудь полезное).

Смежные вопросы