结构C语言的数组

结构C语言的数组,c,struct,C,Struct,在我的程序中,我必须创建struct,在我的例子中,我有struct Processor,下面是我的示例: struct Processor{ int id; struct Task **task; } 主要是我创建了一组处理器(例如2个处理器),我必须使用这个函数在每个处理器中添加任务 struct Processor*创建处理器(int-id,struct-Task**Task) 以下是函数: struct Processor * create_processor(int

在我的程序中,我必须创建struct,在我的例子中,我有struct Processor,下面是我的示例:

struct Processor{
    int id;
    struct Task **task;
}
主要是我创建了一组处理器(例如2个处理器),我必须使用这个函数在每个处理器中添加任务
struct Processor*创建处理器(int-id,struct-Task**Task)

以下是函数:

struct Processor * create_processor(int id, struct Task **task){
    struct Processor * pr = (struct Processor *) (malloc(sizeof(struct Processor)));
    pr->id = id;
    //how to initialize Task set??
    return pr;
}
现在如何初始化函数中的任务集?以及如何使用任务集的元素?我使用了
processor[1]->task[1]->id=5但它返回错误
分段错误(堆芯转储)

当你这样做时,请帮助

struct Processor * pr = (struct Processor *) (malloc(sizeof(struct Processor)));
现在,您已经初始化了一个空的
处理器
结构。由于结构的
任务
成员是一个指针(实际上是一个双指针),因此新初始化的
处理器
中的所有内容都相当于:
结构处理器{id:0,task:0}
,即它只包含
任务
成员的空指针。这可能就是为什么会出现
分段错误
,这是程序访问未初始化内存时发生的错误类型

对于每个处理器必须具有的任务数量,您还必须malloc一个
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));
}
for(int-idx=0;idx

对于每个要初始化的
处理器,依此类推。

这可能会有所帮助。我假设在调用函数之前为任务分配内存。这里有10个任务,我创建了一个处理器,其中包含3个任务:

struct Processor{
    int id;
    struct Task **task;
};

struct Task{ int id; int WCET;};

struct Processor * create_processor(int id, struct Task **task){
    struct Processor * pr = (struct Processor *) (malloc(sizeof(struct Processor)));
    pr->id = id;
    pr->task = task;
    return pr;
}


int main() {
    struct Task taskArray[10]; /* memory for 10 tasks */
    struct Task * taskPtrArray[3]; /* pointers to 3 tasks */
    taskPtrArray[0] = &taskArray[2]; /* pointer to task 2 */
    taskPtrArray[1] = &taskArray[6]; /* pointer to task 6 */
    taskPtrArray[2] = &taskArray[9]; /* pointer to task 9 */

    struct Processor * p1 = create_processor(1, taskPtrArray);

    printf("p1->id = %d \n", p1->id);
    p1->task[2]->WCET = 999;
    printf("p1->task[2]->WCET = %d \n", taskArray[9].WCET);
}
输出为:

p1->id=1

p1->任务[2]->WCET=999


正如“某个程序员伙计”所说。该函数用于执行以下任务:

pr->task = task;

你有没有试过(很明显)
pr->task=task?还请注意,您只为一个
处理器
结构分配内存。请记住数组索引是以零为基础的。请帮助,这很紧急please@ikram也许对你来说这很紧急,但你是在向完全陌生的人寻求免费帮助。你的错误可能在你没有向我们展示的代码中。请更新您的问题,其他人可以编译和运行,复制您的问题。非常感谢帮助我