здесь вы выделяете массив курсов: course* ptr = (course*)malloc(*num_courses * sizeof(course));
для выделения секций массива (массив указателей на студента): ptr[i].sections = (student **)malloc(ptr[i].num_sections * sizeof(student *));
для размещения каждого студента в секциях массива, которые вы необходимо выполнить итерацию по массиву и выделить каждого студента:
for(int j=0; i<ptr[i].num_sections; i++)
{
ptr[i].sections[j]=(student *)malloc(sizeof(student));
}
** вы должны проверить каждый mallo c, если он завершился неудачно или успешно.