在我的程序中,我必须创建结构,在我的例子中,我有结构处理器,这里是我的示例:
struct Processor{
int id;
struct Task **task;
}
主要是我创建了一组处理器(例如 2 个处理器),我必须使用此函数在每个处理器中添加任务
struct Processor * create_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;
但它返回错误 Segmentation fault (core dumped)
请帮忙
最佳答案
当你做的时候
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
依此类推。
关于c - C语言struct数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54949639/