Ошибка в программе со структурами – segmentation fault

#include  struct p { char *name; struct p *next; }; struct p *ptrary[10]; int main() { struct pp, q; p.name = "xyz"; p.next = NULL; ptrary[0] = &p; strcpy(q.name, p.name); ptrary[1] = &q; printf("%s\n", ptrary[1]->name); return 0; } 

Программа предоставляет сегментированную ошибку при выполнении. Что здесь не так? Нужно ли выделять память для ptrary?

Перед использованием вам придется выделить некоторую память.

 q.name = malloc(10); strcpy(q.name, p.name); 

Редактировать: как правильно указатель, отключив, sizeof char будет всегда 1. Следовательно, удаление из malloc .

Вы должны выделить место для строки, прежде чем использовать strcpy() . Вы пытаетесь скопировать новую строку в память, которая содержит строку, инициализированную из строкового литерала, что совершенно недействительно. Такие строки следует рассматривать только для чтения.

Вы можете избежать этой проблемы, скопировав указатель, который затем скопирует строку, созданную строковым литералом:

 q.name = p.name; 
 struct p { char *name; //name points nowhere struct p *next; }; 

strcpy(q.name, p.name); // q.name is any arbitrary value

Выделите память для name перед ее использованием.

ИЛИ объявить как:

 struct p { char name[4]; //the number of characters you require struct p *next; }; 
 #include  struct p { char name[10]; struct p *next; }; struct p *ptrary[10]; int main() { struct pp, q; strcpy(p.name , "xyz"); p.next = NULL; ptrary[0] = &p; strcpy(q.name, p.name); ptrary[1] = &q; printf("%s\n", ptrary[1]->name); return 0; } 

или вы можете использовать p.name = malloc(sizeof(char)*10);