Я пытаюсь присвоить значение атрибутам указателя на структуру, но получить ошибки сегментации.Присвоение значения атрибуту struct
typedef struct {
int id;
char payload[10];
}packet;
void main(){
packet *header;
header->id = 1;
}
Он компилируется, но это дает мне ошибку seg, когда я запускаю его. Он работает только при использовании «malloc» при создании заголовка. Почему это? Обычно мне не нужно выделять память для других типов указателей.
Помните, что правильный тип возврата для 'main()' is 'int', а не' void', несмотря на то, что вы можете прочитать в многочисленных книгах. Кроме того, ни один из нижеприведенных ответов о том, что использование 'malloc()' фактически мешает проверять, что 'malloc()' преуспел. Конечно, в рамках этой программы сбой крайне маловероятен. Однако хорошая практика остается хорошей практикой, а не проверкой 'malloc()' в конечном итоге укусит вас - возможно, когда ваша программа будет демоверсифицирована генеральному директору или выпущена тысячам, если не миллионам клиентов, с вытекающими из этого затратами на исправление проблема. –
Если вы видите 'void main()' в книге, это знак того, что автор не очень хорошо знает C и что вы должны найти лучшую книгу. ('void main()' или лучше 'void main (void)', может быть верным для встроенной системы, но если вы работаете над такой системой, вы уже должны это знать.) –