Когда вы делаете
struct Processor * pr = (struct Processor *) (malloc(sizeof(struct Processor)));
, вы теперь инициализируете пустую структуру Processor
.Поскольку элемент task
структуры является указателем (фактически двойным указателем), все, что у вас есть в только что инициализированном Processor
, эквивалентно: struct Processor { id: 0, task: 0 }
, то есть он просто содержит нулевой указатель для члена task
,Вероятно, поэтому вы получаете Segmentation fault
, который является типом ошибки, которая возникает, когда ваша программа обращается к неинициализированной памяти.
Вам также придется распределять массив из Task*
(указатели задачи) для сколь угодно многихзадачи, которые должен иметь каждый процессор.Например,
pr.task = (struct Task **) malloc(sizeof(struct Task *) * N_TASKS); // pr.task should probably be called pr.tasks??
, затем вам также нужно инициализировать память для каждой фактической задачи:
for (int idx = 0; idx < N_TASKS; idx++) {
pr.task[idx] = (struct Task *) malloc(sizeof(struct Task));
}
и т. Д. Для каждой Processor
, которую вы хотите инициализировать.